Сбой вызова RestTemplate (с Джексоном), если JSON имеет неверное имя свойства - PullRequest
0 голосов
/ 23 июня 2019

У меня есть следующий вызов REST с конвертером Spring (5.0.1) RestTemplate и Jackson 2 (fastxml):

final List<HttpMessageConverter<?>> messageConverters =   restTemplate.getMessageConverters();

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

final ObjectMapper objectMapper = converter.getObjectMapper();
objectMapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);

restTemplate.getMessageConverters().add(converter);

Что я не понимаю, так это когда ответ от сервера имеет неизвестное свойство JSON, он просто устанавливает его на null против того, что я предположил RestTemplate#getForEntity(), выдавая исключение при извлечении данных:

ResponseEntity<MyResponse> responseEntity = restTemplate.getForEntity("http//some-url/api", MyResponse.class); 

Объект отображения - просто Serializable и не имеет аннотации Джексона:

public class MyResponse implements Serializable {
  private String propertyOne;
  private String propetyTwo;
}

Ответ JSON выглядит так:

{ 
   "propertyOne":"one",
   "badName":"two"    
} 

Сопоставленный объект содержит значение для propertyOne, но null для badName в этом случае.

Не вызывает ли RestTemplate / Jackson нормальное исключение / ошибку в этих случаях?

Что если я хочу заставить вызов вызвать исключение?

1 Ответ

1 голос
/ 23 июня 2019

Использовать FAIL_ON_UNKNOWN_PROPERTIES

Функция, которая определяет, встречаются ли неизвестные свойства (те, которые не сопоставляются со свойством, и нет «какого-либо установщика» или обработчика, который можетобрабатывать это) должен привести к ошибке (выбрасывая JsonMappingException) или нет.Этот параметр вступает в силу только после того, как были опробованы все другие методы обработки для неизвестных свойств, а свойство остается необработанным.

Функция включена по умолчанию (это означает, что исключение JsonMappingException будет выброшено при обнаружении неизвестного свойства).

Пример:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,true);
...