使用 Genson 和 Jersey 解析 JSON 来自 POST 的日期
Parse JSON Date from POST with Genson and Jersey
快速介绍(可跳过):
你好,关于这个话题有很多问题和答案,但有时解决方案很简单,你甚至都没有想到,因为我已经浪费了很多时间,所以我想 post 所有答案的补充。
问题:
您有一个 JSON REST 服务来处理 POST 保存 JSON 对象的请求,但该对象包含一个 Date 字段,Genson 没有开箱即用地对其进行解析。
Java对象:
public class MyObj {
// The field you want to serialize/deserialize
private Date date;
// Constructor with no arguments needed by Genson
public MyObj() {}
}
Jersey 的 REST 服务:
@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();
}
}
javascript中的客户与jQuery:
// 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'
});
解决方案:
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 对象中字段的日期类型是使用 :
导入的
import java.util.Date;
而不是:
import java.sql.Date;
我自己弄明白了,但在 Whosebug 上找不到任何地方,这是一个愚蠢的错误,非常简单,你无法想到(像我),我希望它能帮助别人。
快速介绍(可跳过): 你好,关于这个话题有很多问题和答案,但有时解决方案很简单,你甚至都没有想到,因为我已经浪费了很多时间,所以我想 post 所有答案的补充。
问题: 您有一个 JSON REST 服务来处理 POST 保存 JSON 对象的请求,但该对象包含一个 Date 字段,Genson 没有开箱即用地对其进行解析。
Java对象:
public class MyObj {
// The field you want to serialize/deserialize
private Date date;
// Constructor with no arguments needed by Genson
public MyObj() {}
}
Jersey 的 REST 服务:
@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();
}
}
javascript中的客户与jQuery:
// 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'
});
解决方案:
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 对象中字段的日期类型是使用 :
导入的import java.util.Date;
而不是:
import java.sql.Date;
我自己弄明白了,但在 Whosebug 上找不到任何地方,这是一个愚蠢的错误,非常简单,你无法想到(像我),我希望它能帮助别人。