首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON中返回java作为字符串的google云终结点

在JSON中返回java作为字符串的google云终结点
EN

Stack Overflow用户
提问于 2016-01-14 06:31:41
回答 1查看 697关注 0票数 4

我使用的是google应用引擎最新版本1.9.30,我将云端点定义如下

代码语言:javascript
复制
@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响应是

代码语言:javascript
复制
{
    "number": "5",
    "date": "1452751174672"
}

但是,如果我将5L改为5,那么我看到JSON响应为

代码语言:javascript
复制
{
    "number": 5,
    "date": "1452751174672"
}

为什么云端点在JSON中将长值转换为字符串。当我在老的应用程序引擎版本1.9.19工作时,它过去是工作的。在JSON上呈现的时间也一样长。我在这里有遗漏什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-14 09:06:40

JSON是JavaScript对象表示法,它实际上是一个有效的Javascript。因此,它应该遵循javascript标准。

Javascript的编号是54位,从-(2^53 - 1)(2^53 - 1)。但是Java的长是64位数,从-2^632^63-1

见差异:

代码语言:javascript
复制
Java Long Max         = 9223372036854775807
Javascript Number Max = 9007199254740992

您根本无法将Java Long转换为Javascript编号,因为它并不适用于所有值。因此,使用字符串表示代替。

您有两个可能的解决方案:

或者,如果您真的想要日期,最好在UTC时区内将其格式化为yyyy-MM-dd\'T\'HH:mm:ss。它与Javascript日期格式兼容。

规格:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34783049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档