Я использую Spring-MVC и перенастраиваю ResponseEntity.Spring MVC использует Jackson для преобразования MyType в JSON, который возвращается в браузер.Иногда поле java.util.Date в объекте MyType возвращается как *****, а не как значение.
Далее в JSON это выглядит как "dateField": **********, который вызывает ошибку JavaScript, поскольку это не допустимый JSON.
Я иногда говорю, потому что егоне происходит для всех дат.Я изменил дату на ноль, и она работает, измените на 1 января 1970 года, и она работает, вернитесь к 4 мая 1988 года, и я увижу это поведение.
Итак, 10000 футов, что происходит, - это мое приложение получаетGET запрос на запись.Я прочитал запись из нашего хранилища данных в формате XML и преобразовал ее в Java POJO.Затем я возвращаю ResponseEntity, содержащий этот POJO, и позволяю spring-mvc / jackson преобразовать его в JSON для использования моим вызывающим JavaScript.
Сначала я подумал, что проблема может заключаться в этом процессе анализа XML.Я создал тесты junit, которые запускают XML через анализатор и проверяют правильность полученного POJO.Это включает фактический XML с той датой 4 мая, которая терпит неудачу.Доказательство проблемы не в разборе XML.
Я также смотрел, как настроить Джексона весной.Я создал еще один модульный тест, в котором Джексон использовал бы маршал для POJO из более раннего теста в JSON.Затем я изменил конфигурацию Джексона, чтобы она соответствовала стандартной конфигурации Джексона, которую использует spring-mvc.Если поместить JSON, дата будет обработана правильно.
Затем я начал манипулировать конфигурацией, изменив такие вещи, как SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, чтобы посмотреть, смогу ли я воспроизвести проблему.
Я также попытался запустить POJO через картограф Джексона, у которого переменная даты либо не установлена, либо явно установлена на ноль.Джексон обработал нуль и сбросил то же самое и выплюнул JSON с "dateField": null, как я и ожидал.
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, которое является полем Date, которое я описывал.