JSON序列化对象的格式为2006-10-04T19:49:49。无法对其进行反序列化

时间:2017-01-02 07:52:47

标签: java json jackson deserialization

我正在使用struts2并序列化对象并将其传递给JSP。从jsp我再次将此对象传递给java并尝试使用以下代码反序列化它

ObjectMapper objectMapper=new ObjectMapper();
receiptDocument = objectMapper.readValue(receiptDocumentStr,new TypeReference<ReceiptDocument>(){});

被序列化的Object在Timestamp中有一个属性。因此,当序列化时,日期将转换为以下格式2006-10-04T19:49:49。但是当我尝试反序列化它时,它会给出异常

org.codehaus.jackson.map.JsonMappingException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

请建议我如何对其进行反序列化。

2 个答案:

答案 0 :(得分:1)

尝试按照here

所述使用
  objectMapper.setDateFormat(myDateFormat);

答案 1 :(得分:0)

我试图对JSON对象进行反序列化,使用struts2通过以下代码发送到jsp

@Result(name = SUCCESS, type = JSON, params = {
"ignoreHierarchy", "false", "includeProperties","bookList\\[\\d+\\]\\..*})

但是当我使用jquery post将此bookList发送到服务器并尝试反序列化时,它无效。所以我按照以下方式序列化了

SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().setDateFormat(sd);
bookListJsonString=  mapper.writeValueAsString(bookList);

在反序列化代码中,如下所示

ObjectMapper objectMapper=new ObjectMapper();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.getDeserializationConfig().setDateFormat(sd);
objectMapper.getDeserializationConfig().disable(Feature.FAIL_ON_UNKNOWN_PROPERTIES); //To avoid failure if there is no any class fields.                
List<BooksDocument> bookList =  objectMapper.readValue(bookListJsonString, new TypeReference<List<BooksDocument>>() {});

如果有人有更好的方法去做。请发布。