我正在使用Spring-MVC并重新调整ResponseEntity。 Spring MVC使用Jackson将MyType转换为JSON,然后将其返回到浏览器。有时,MyType对象中的java.util.Date字段以*****而不是值形式返回。
进一步在JSON中看起来像“ dateField”:**********,这会导致JavaScript错误,因为那不是有效的JSON。
我之所以偶尔说是因为它并非在所有日期都发生。我将日期更改为null,然后将其更改为1970年1月1日,然后将其更改为1988年5月4日,就可以看到这种行为。
所以10,000英尺视图是怎么回事,我的应用程序收到GET请求记录。我从XML的数据存储中读取了记录,并将其转换为Java POJO。然后,我返回一个包含该POJO的ResponseEntity,并允许spring-mvc / jackson将其转换为供我的调用JavaScript使用的JSON。
起初,我认为问题可能出在解析XML的过程上。我创建了junit测试,该测试通过解析器运行XML,并验证生成的POJO是否正确。这包括5月4日失效的实际XML。证明问题不在于解析XML。
我还一直在研究如何在春季配置Jackson。我创建了另一个单元测试,该单元测试将使用Jackson将先前测试中的POJO编组为JSON。然后,我操纵了Jackson的配置,以匹配spring-mvc使用的默认Jackson配置。放出JSON即可显示正确处理的日期。
然后,我开始通过更改SerializationFeature.WRITE_DATES_AS_TIMESTAMPS之类的东西来操纵配置,以查看是否可以重现该问题。
我还尝试通过具有未设置日期变量或显式设置为null的jackson映射器运行POJO。杰克逊(Jackson)处理了null并取消设置了相同的值,并按我的期望用“ dateField”:null吐出了JSON。
public ResponseEntity<SearchResponse<SearchResult, FacetResult>> performSearch(SearchRequest request){
SearchResponse response = searchService.search(request);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "application/json; charset=UTF-8");
return new ResponseEntity<SearchResponse<SearchResult, FacetResult>>(response, responseHeaders,
HttpStatus.OK);
}
响应有一个字段reportDate,它是我一直在描述的日期字段。