2012-02-08 6 views
3

У меня есть класс на Java, который типично типизирован. Предполагается вернуть объект типа T после получения некоторого json. Я использую следующий код для создания объекта:JsonMappingException Не получается бросить, когда он должен

ObjectMapper mapper = new ObjectMapper(); 
this.object = mapper.readValue(json, type); 

Этот метод бросает JsonMappingException, и должны делать это, если объект не соответствующего типа. Проблема, с которой я сталкиваюсь (при модульном тестировании), заключается в том, что если я передаю json неправильного типа, если оба объекта являются pojos, исключение исключений не возникает. Я просто возвращаю объект с правильным типом, где все его поля равны нулю.

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

+2

Возможно, у вас есть '@JsonIgnoreProperties (ignoreUnknown = true)' set? – beerbajay

+0

Это истинный ответ ... можете ли вы написать это как ответ, чтобы я мог его принять? – Craig

ответ

2

Вы, возможно, есть:

@JsonIgnoreProperties(ignoreUnknown = true) 

установить где-нибудь, так джексон не жалуется на несоответствие.

+0

У меня нет @JsonIgnoreProperties (ignoreUnknown = true) где угодно и еще, когда я утверждаю, что в JsonMappingException в Junits я получаю AssertionFailure. экземпляр com.fasterxml.jackson.databind.JsonMappingException is java.lang.IllegalArgumentException – Gnana

+0

FYI: Я бросаю IllegalArgumentException, когда имя равно null. Но мой другой десериализатор для другого POJO, бросает JsonMappingException как шарм (даже то, что бросает IllegalArgumentException) – Gnana

+0

от той, которая бросает JsonMappingException com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath (JsonMappingException.java:210) \t на ком .fasterxml.jackson.databind.JsonMappingException.wrapWithPath (JsonMappingException.java:177) \t на com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow (BeanDeserializerBase.java:1474) \t в com.fasterxml.jackson.databind .deser.BeanDeserializer.vanillaDeserialize (BeanDeserializer.java:260) \t at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:125) – Gnana

0

Как вы ожидаете, что Джексон узнает, что JSON не представляет ожидаемый тип? Данные JSON не имеют типа, кроме базовой структуры Object/Array/scalars. Так что пока структура совместима, все работает, и это по дизайну.

Смежные вопросы