当前位置: 首页 > 知识库问答 >
问题:

用Genson和Jersey解析来自POST的JSON日期

子车超英
2023-03-14

快速介绍(可以跳过):嗨,有很多关于这个主题的问题和答案,但是有时候解决方案很简单,你甚至都没想过,因为我已经浪费了很多时间,所以我想发布一个对所有答案的补充。

问题:您有一个JSON REST服务,它处理POST请求以保存JSON对象,但该对象包含Genson未开箱即用解析的Date字段。

Java对象:

public class MyObj {

    // The field you want to serialize/deserialize
    private Date date;

    // Constructor with no arguments needed by Genson
    public MyObj() {}
}

球衣的其余服务:

@Path("/api/my-obj")
public class MyObjAPI {

    @POST
    @Consumes("application/json")
    public Response insert(MyObj myObj) {
        // do what you want with myObj, it's ready to use with the date
        return Response.created('url/to/created/object').build();
    }
}

使用jQuery的javascript客户端:

// This is the JSON Object to POST
var myObj = {
    date: new Date()
};

$.ajax({
    method: 'POST',
    url: '/api/my-obj',
    data: JSON.stringify(myObj),
    dataType: 'json',
    processData: false,
    contentType: 'application/json'
});

共有1个答案

怀浩大
2023-03-14

溶液:

Genson提供了一种简单的方法来定义日期的序列化方式,这是一种随处可见的解决方案:

@Provider
public class GensonProvider implements ContextResolver<Genson> {

    private final Genson genson = new GensonBuilder()
            .useDateAsTimestamp(false)
            .useDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
            .create();

    @Override
    public Genson getContext(Class<?> type) {
        return genson;
    }
}

重要事项:

如果上面的解决方案不起作用,请确保Java对象中字段的Date类型是使用以下命令导入的类型:

import java.util.Date;

而不是:

import java.sql.Date;

我自己算出来的,但在StackOverflow上没有找到,这是一个愚蠢的错误,简单到你无法想到(像我一样),我希望它能帮助别人。

 类似资料:
  • 类似于Jersey:带有1个元素的Json数组被序列化为object,但在客户端。例如,我收到一个JSON对象,其中一个字段是一个数组,但如果只有一个元素,它就是一个单独的对象。 对 我正在使用 Jersey/Genson 解析/取消编组 JSON。当然,如果JSON与目标类不匹配,我会收到错误(例如) 我已经阅读了很多关于这个错误以及如何在服务器端创建JSON对象时如何避免的信息,但是我没有发现

  • 我试图将一个对象转换为json格式,但它不起作用(我得到一个奇怪的堆栈溢出异常)。它从对象到XML都能完美地工作。我有一个简单的实体类User和另一个具有多个关系的类。 相关类 我将@XmlTransient注释放在我想要忽略的getter上。 下面是我的rest服务中的一个方法,它从用户的昵称返回用户 因此,它使用@products({“application/xml”})而不是@product

  • 在过去的几天里,我一直在努力解决这个问题,我想我尝试了在互联网上找到的每一个例子。我正在尝试登录我的REST,并获取持续通信的授权码。它在使用邮递员时有效 ------取自邮递员生成代码片段---- 它回来了 我的CodenameOne项目中的代码是: 当使用CodenameOne模拟器网络监视器时,会产生以下结果

  • 我有一个嵌套的JSON语句,我需要将其转换为触发数据框。这个JSON语句存在于数据框列中。我一直在尝试使用“from_json”和“get_json_object”解析数据框列中的语句,但无法读取数据。这是我一直试图阅读的源数据的最小片段: 我需要提取嵌套的cript值。我使用下面的代码来清理数据并将其读入数据框 每次运行上述代码时,我都会得到一个空数据框。请帮忙。 尝试了以下内容,但没有成功:P

  • 这是我的用户类,我要在我的数据库中保存符合ISO的日期时间。 这是我的球衣控制器: 我如何使用像泽西岛这样的日期时间格式?是否可以发送一个datatime并自动创建Java8日期时间对象?

  • 问题内容: 我已经在Java中生成了一个包含JSON对象的HTMLPost请求,并希望在PHP中对其进行解析。 并在服务器上 我猜这是因为JSON特殊字符已编码。 json_decode返回空响应 知道为什么吗? 问题答案: 实际上,您不是在发布实体,而是在发布具有单个值对json =(encoded json)的HTTP表单实体()。 代替 尝试