Выделение Java POJO в JSON с использованием Spring MVC, в результате чего поле содержит ********* вместо значения даты - PullRequest
0 голосов
/ 21 июня 2019

Я использую 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, которое я описывал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...