1

我正在使用 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

更新 似乎每当我使用播放作业和 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"); 
4

3 回答 3

1

听起来这可能是一个错误。它可能与您的模板有关 - 它是否明确指定了编码?

响应格式是什么?您可以通过使用 chrome 中的检查器或 Firefox 中的 Web 控制台来确定这一点。

(虽然我当然同意行为应该是一致的 - 在这里提交一个错误可能值得:http: //play.lighthouseapp.com/projects/57987-p​​lay-framework /tickets )

于 2013-05-29T20:01:42.863 回答
1

这是一种解决方法;首先重置输出流然后渲染。

response.reset();
response.contentType="application/json; charset=utf-8";
renderJSON("play has some bugs")
于 2014-09-29T22:00:27.287 回答
0

我能够将futures & callables与executors一起使用,并且与上面提到的代码相同(使用play 1.2.5)。唯一的区别是我没有明确使用游戏作业(因此问题似乎与 gson 无关)。

于 2013-05-29T22:13:02.620 回答