在播放框架 1.2.5 中使用 await/job 后 JSON 消息中的无效字符
Posted
技术标签:
【中文标题】在播放框架 1.2.5 中使用 await/job 后 JSON 消息中的无效字符【英文标题】:invalid characters in JSON message after using await/job in play framework 1.2.5 【发布时间】:2013-05-28 19:57:06 【问题描述】:我正在使用 play framework 1.2.5 作业 - 在等待之后,我以 JSON 格式向 Web UI 发送消息。不使用作业时,相同的 JSON 逻辑可以正常工作 - 但是,在使用作业和等待之后,JSON 消息似乎包含无效字符(客户端 javascript 不再将其识别为有效 JSON)。浏览器不会呈现乱码/无效字符 - 我将尝试使用 wireshark 看看是否可以添加更多详细信息。关于可能导致这种情况以及如何最好地防止这种情况的任何想法?在此先感谢(我有理由确定是我的代码导致了问题,因为我不能成为第一个这样做的人)。我还将尝试使用 executors/futures 而不是玩工作进行测试,看看效果如何。
Promise<String> testChk = new TestJobs(testInfo, "validateTest").now(); //TestJobs extends Job<String> & I'm overriding doJobWithResult. Also, constructor for TestJobs takes two fields (type for testInfo & String)
String testChkResp = await(testChk);
renderJSON(new TestMessage("fail", "failure message")); //TestMessage class has two String fields and is serializable
更新:我正在使用 gson & JDK1.6
更新似乎每次使用playjobs和renderJSON时编码都有问题。
TestMessage:(不使用作业时有效)
导入 java.io.Serializable;
public class TestMessage
public String status;
public String response;
public TestMessage()
public TestMessage(String status, String response)
this.status = status;
this.response = response;
更新: 即使在依赖作业时使用以下内容也会产生 utf-8 影响。
RenderJSON("test");
【问题讨论】:
贴出TestMessage类的代码 @Tom - 已添加。在不使用作业时工作,但在使用作业时,utf-8 受到影响,或者看起来如此 【参考方案1】:听起来这可能是一个错误。它可能与您的模板有关 - 它是否明确指定了编码?
响应格式是什么?您可以通过使用 chrome 中的检查器或 Firefox 中的 Web 控制台来确定这一点。
(虽然我当然同意行为应该是一致的 - 可能值得在这里提交一个错误:http://play.lighthouseapp.com/projects/57987-play-framework/tickets)
【讨论】:
谢谢 - 我正在删除工作并重试。客户端消息乱码(一般是utf-8转换/影响时)【参考方案2】:这是一种解决方法;首先重置输出流然后渲染。
response.reset();
response.contentType="application/json; charset=utf-8";
renderJSON("play has some bugs")
【讨论】:
【参考方案3】:我能够将futures & callables 与executors 一起使用,并且与上面提到的代码相同(使用play 1.2.5)。唯一的区别是我没有明确使用游戏作业(因此这个问题似乎与 gson 无关)。
【讨论】:
以上是关于在播放框架 1.2.5 中使用 await/job 后 JSON 消息中的无效字符的主要内容,如果未能解决你的问题,请参考以下文章