2014-10-20 3 views
1

Я знаю, как я могу сделать Джексон игнорировать любые дополнительные поля в Json, просто добавив @JsonIgnoreProperties (ignoreUnknown = истина):Джексон с JSON: как я могу заставить его игнорировать дополнительные свойства, но ошибка на неполном json?

@JsonIgnoreProperties(ignoreUnknown = true) 
class MyDto { 
    int someField; 
} 

Но побочный эффект этого является то, что Джексон теперь принимает неполным JSON и заполняет отсутствующие поля нулями. Как я могу заставить Джексона требовать, чтобы каждое поле существовало в json и все еще игнорировало дополнительные поля?

спасибо.

ответ

1

Джексон явно НЕ проверяет логическое содержимое POJO; вместо этого рекомендуется использовать проверку бина (JSR-303, см. http://en.wikipedia.org/wiki/Bean_Validation) API-реализацию; например, один, предоставленный проектом Hibernate: http://hibernate.org/validator/

Это подход, который принимает множество каркасов; например, DropWizard поддерживает привязку данных с помощью Jackson, а затем проверку (после привязки данных до запуска бизнес-логики) с использованием проверки Bean.

0

Чтобы проверить, доступны ли все необходимые свойства, вам необходимо добавить необходимую информацию об этом свойстве.

@JsonProperty(value = "response", required = true) 
public SomeResponse response; 
+0

К сожалению, это не будет действительной валидацией; это влияет только на такие вещи, как генерация схемы JSON. – StaxMan

+0

По умолчанию Джексон не будет выполнять никаких проверок. Но вы можете использовать проверку Bean, как описано @StaxMan, или создать собственные десериализаторы и добавить туда логику. – Drejc

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