在播放框架 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 消息中的无效字符的主要内容,如果未能解决你的问题,请参考以下文章

在播放框架 1.2.5 中对路由不区分大小写

在播放框架 1.2.5 中,扩展作业运行后台阻止请求/响应的类

播放框架 1.2.5 的路由查询

运行Bootstrap加载时播放框架1.2.5异常

播放框架1.2.5应用项目如何重命名

播放框架1.2.5 Websocket