Pok*_*uri 4 java google-app-engine json google-cloud-endpoints
我正在使用Google App Engine最新版本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;
}
}
Run Code Online (Sandbox Code Playgroud)
这里EndpointDateTransformer将Date转换为Long值,并且来自端点的JSON响应是
{
"number": "5",
"date": "1452751174672"
}
Run Code Online (Sandbox Code Playgroud)
但是如果我将5L更改为5,我会看到JSON响应为
{
"number": 5,
"date": "1452751174672"
}
Run Code Online (Sandbox Code Playgroud)
为什么云端点会在JSON中将Long值转换为字符串。当我使用旧版App Engine 1.9.19时,它曾经可以工作。以及在JSON上的长渲染。我在这里想念什么吗?
JSON是JavaScript对象表示法,实际上是有效的Javascript。因此,它应该遵循javascript标准。
JavaScript的Number是54位数字,从-(2^53 - 1)到(2^53 - 1)。但是Java的long是64位数字,从-2^63到2^63-1。
看区别:
Java Long Max = 9223372036854775807
Javascript Number Max = 9007199254740992
Run Code Online (Sandbox Code Playgroud)
您根本无法将Java Long转换为Javascript Number,因为它不适用于所有值。因此,将使用字符串表示形式。
您有两种可能的解决方案:
Integer或者,如果您确实想要日期,最好将其格式化为yyyy-MM-dd\'T\'HH:mm:ssUTC时区。与Javascript日期格式兼容。
眼镜: