我使用的是google应用引擎最新版本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将日期转换为长值,端点的JSON响应是
{
"number": "5",
"date": "1452751174672"
}但是,如果我将5L改为5,那么我看到JSON响应为
{
"number": 5,
"date": "1452751174672"
}为什么云端点在JSON中将长值转换为字符串。当我在老的应用程序引擎版本1.9.19工作时,它过去是工作的。在JSON上呈现的时间也一样长。我在这里有遗漏什么吗?
发布于 2016-01-14 09:06:40
JSON是JavaScript对象表示法,它实际上是一个有效的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编号,因为它并不适用于所有值。因此,使用字符串表示代替。
您有两个可能的解决方案:
Integer或者,如果您真的想要日期,最好在UTC时区内将其格式化为yyyy-MM-dd\'T\'HH:mm:ss。它与Javascript日期格式兼容。
规格:
https://stackoverflow.com/questions/34783049
复制相似问题