在和Jersey&Jackson进行反序列化JSON日期时遇到一些问题
我有一个课程,例如Item:
public class Item {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private Date itemDate;
// other String values and getters/setters
}
端点如下:
@Path("/createItem")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes(MediaType.APPLICATION_JSON)
public Response newItem(Item i) {
System.out.println(i.getItemDate());
}
如果我发布以下JSON数据
{
"itemDate": "2015-03-01"
}
i.getItemDate()
始终返回null。除非我使用默认的日期格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
,否则我试图将格式更改为yyyy-MM-dd
,但是我无法执行此操作。我已经按照本网站上的示例尝试使用自定义类@JsonDeserialize
。
还有一点值得注意,当使用自定义@JsonDeserializer时,它将永远不会碰到自定义类中的任何断点,就像它忽略了注释一样,例如
@JsonDeserialiser(using = MyCustomDateFormat.class)
如果我在CustomJsonDateDeserializer
中有一个断点,它将永远不会受到打击。
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
我是否需要做其他事情来注册反序列化处理程序,或者它是否可以与上述方法之一一起工作?