google 云端点返回 java 与 JSON 中的字符串一样长
google cloud endpoints returning java long as string in JSON
我正在使用 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;
}
}
此处 EndpointDateTransformer 将 Date 转换为 Long 值,端点的 JSON 响应为
{
"number": "5",
"date": "1452751174672"
}
但如果我将 5L 更改为 5,那么我会看到 JSON 响应为
{
"number": 5,
"date": "1452751174672"
}
为什么云端点在 JSON 中将 Long 值转换为字符串。当我使用旧的应用程序引擎版本 1.9.19 时,它曾经工作过。 Long 在 JSON 上也呈现为 long。我在这里遗漏了什么吗?
JSON 是 JavaScript Object Notation,它实际上是一个有效的 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
您根本无法将 Java Long 转换为 Javascript Number,因为它不适用于所有值。所以改用字符串表示。
您有两种可能的解决方案:
- 将您的值定义为
Integer
- 使用带有自定义转换器的实体对象,参见https://cloud.google.com/appengine/docs/java/endpoints/annotations#apitransformer
或者如果你真的想要 Date,最好将其格式化为 UTC 时区内的 yyyy-MM-dd\'T\'HH:mm:ss
。它与 Java脚本日期格式兼容。
规格:
我正在使用 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;
}
}
此处 EndpointDateTransformer 将 Date 转换为 Long 值,端点的 JSON 响应为
{
"number": "5",
"date": "1452751174672"
}
但如果我将 5L 更改为 5,那么我会看到 JSON 响应为
{
"number": 5,
"date": "1452751174672"
}
为什么云端点在 JSON 中将 Long 值转换为字符串。当我使用旧的应用程序引擎版本 1.9.19 时,它曾经工作过。 Long 在 JSON 上也呈现为 long。我在这里遗漏了什么吗?
JSON 是 JavaScript Object Notation,它实际上是一个有效的 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
您根本无法将 Java Long 转换为 Javascript Number,因为它不适用于所有值。所以改用字符串表示。
您有两种可能的解决方案:
- 将您的值定义为
Integer
- 使用带有自定义转换器的实体对象,参见https://cloud.google.com/appengine/docs/java/endpoints/annotations#apitransformer
或者如果你真的想要 Date,最好将其格式化为 UTC 时区内的 yyyy-MM-dd\'T\'HH:mm:ss
。它与 Java脚本日期格式兼容。
规格: