【问题标题】:Json response character encoding in Play FrameworkPlay 框架中的 Json 响应字符编码
【发布时间】:2013-01-14 10:44:13
【问题描述】:

我遇到了问题,需要您的帮助。

我正在使用 Java 中的 Play Framework v1.2.4 用于我的移动应用程序的服务器中工作,但 Json 响应存在问题。

我一直使用视图来编码我的 Json 响应,但我意识到当我使用特殊字符(如 ñ、\n、á、é 等)时会出现问题,并且我的移动应用程序有错误运行。

代码如下:

{
  "id":${data[0]},

  "messages": 
  [
      #{list items:data[1], as:'message'}
      {           
           "text":"${message.text}"
      }${message_isLast ? '' : ','
}#{/list}
 ] }

我尝试使用 java 方法而不是在 .json 视图中正确解析响应,这没关系。那是代码:

JsonObject jsonOut = new JsonObject(); 
jsonOut.addProperty("id",conversation.id); 
JsonArray jsonArray = new JsonArray();   

for(int i = 0; i < conversation.messages.size; i++)  {
    Message message = conversation.messages.get(i);
    JsonObject jsonMessage = new JsonObject();
    jsonMessage.addProperty("text", message.text);
    jsonArray.add(jsonMessage); 
}

jsonOut.add("messages", jsonArray); 

renderText(jsonOut);

我的问题是我是否可以在视图中做一些事情来将变量正确解析为 json 格式而无需手动操作,因为我有很多必须更改的响应。

【问题讨论】:

    标签: java json playframework playframework-1.x


    【解决方案1】:

    使用模板来呈现 JSON 字符串是……不好(无论如何,我应该在这里完成我的答案……)。

    JSON 序列化程序通常会处理正确的引号、转义特殊字符、尊重类型、编码字符(如果需要)等...我可以看到您的模板不这样做。

    使用模板,您需要自己做所有事情,如果您不完全了解 JSON 规范,您将被判失败。这不仅仅是将${message.text} 粘贴到适当的位置......

    换句话说:你的第二种方法总是比第一种更好。

    【讨论】:

    • 感谢您的回答。我必须重做我的所有申请,但最好知道正确的做法。
    【解决方案2】:

    JSON 的默认编码是 UTF-8。 Java 的默认编码取决于区域设置。

    您需要确保运行 Play 的 JVM 也以 Charset.defaultCharset() 的形式运行 UTF-8。

    【讨论】:

    • 但是我的服务器已经上传到 Heroku Server。我可以在那里将默认编码设为 UTF-8 吗?怎么样?
    【解决方案3】:

    编译器和编辑器都应将其编码设置为“UTF-8”。 Play 框架和 JSON 已经使​​用 UTF-8。属性文件应该是\u.... 编码的。错误可能出在非 Java 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 2012-01-01
      相关资源
      最近更新 更多