Как мне установить функцию в объектном преобразователе Spring Message Converter?

Я использую сторонний REST API, который возвращает «NaN» в своем ответе JSON :( Я не могу изменить ответ.

Я использую Spring MVC с RestTemplate и встроенными преобразователями сообщений для десериализации JSON в объект.

Мне было интересно, есть ли разумный способ установить свойство JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, чтобы разрешить NaN в ответе.

Поскольку у меня есть другие преобразователи сообщений, которые мне не нужно настраивать самостоятельно, я сейчас делаю следующее:

List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
for (HttpMessageConverter converter : converters) {
    if (converter instanceof MappingJacksonHttpMessageConverter) {
        ObjectMapper objectMapper = ((MappingJacksonHttpMessageConverter) converter).getObjectMapper();
        objectMapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true);
    }
}

Это работает, но мне не нравится тот факт, что я а) повторяю и б) выполняю сравнение instanceof только для установки этого свойства.

Что было бы более умным/приятным способом сделать это?


person C0deAttack    schedule 20.05.2013    source источник
comment
Попробуйте создать свой собственный экземпляр этого компонента, который уже будет настроен. Пожалуйста, посмотрите этот вопрос: stackoverflow.com/questions/10650196/   -  person Michał Ziober    schedule 20.05.2013


Ответы (1)


Вот ваши варианты:

  1. Создайте экземпляр и настройте MappingJacksonHttpMessageConverter, затем установите преобразователи сообщений вашего шаблона отдыха на этот экземпляр. См. RestTemplate.html#setMessageConverters(java.util.List). Обратите внимание, что это удалит все преобразователи сообщений по умолчанию, которые автоматически создаются при создании экземпляра RestTemplate.
  2. Используйте @JsonDeserialize. См. http://dev.sghill.net/2012/04/how-do-i-write-jackson-json-serializer.html
person ramirezag    schedule 20.05.2013
comment
По поводу 1. У меня есть другие конвертеры, которые я не хочу терять, либо приходится создавать вручную, так как в них нет ничего особенного. Что касается 2. Написание собственной реализации только для того, чтобы иметь возможность установить свойство, является излишним. Спасибо за ответ. - person C0deAttack; 21.05.2013