我正在使用谷歌应用引擎最新版本1.9.30,我定义我的云端点如下
@Api(name="app", version="v1", transformers={EndpointDateTransformer.class})
public class MyEndpoints {
@ApiMethod(name="dummy", path="dummy", httpMethod=HttpMethod.GET)
public Map<String, Object> dummy(){
Map<String, Object> dummy = Maps.newHashMap();
dummy.put("date", DateUtil.getCurrentTimestamp());
dummy.put("number", 5L);
return dummy;
}
}
此处EndpointDateTransformer将Date转换为Long值,来自端点的JSON响应为
{
"number": "5",
"date": "1452751174672"
}
但如果我将5L更改为5,那么我将JSON响应视为
{
"number": 5,
"date": "1452751174672"
}
为什么云端点在JSON中将Long值转换为字符串。当我在使用旧的应用引擎版本1.9.19时,它曾经工作过。在JSON上也可以长时间渲染。我在这里错过了什么吗?
答案 0 :(得分:3)
JSON是JavaScript Object Notation,它实际上是一个有效的Javascript。所以它应该遵循javascript标准。
Javascript的号码是54位号码,从-(2^53 - 1)
到(2^53 - 1)
。但Java的长度为64位,从-2^63
到2^63-1
。
见差异:
Java Long Max = 9223372036854775807
Javascript Number Max = 9007199254740992
您根本无法将Java Long转换为Javascript Number,因为它不适用于所有值。所以改为使用字符串表示。
您有两种可能的解决方案:
Integer
或者如果你真的想要Date,最好在UTC时区内将其格式化为yyyy-MM-dd\'T\'HH:mm:ss
。它与Javascript日期格式兼容。
规格: