Джексон: избегание исключений из-за немоделированных полей - PullRequest
3 голосов
/ 17 января 2012

У меня есть несколько бинов, и они (явно) моделируют основные типы данных в JSon.Тем не менее, иногда Jsons Im чтения имеют дополнительные данные в них.

Есть ли способ аннотировать / определять Бин в Джексоне, чтобы он использовал явные имена полей для некоторых полей (например, тех, о которых я знаю), в то же время втискивая дополнительные поля в карту /список?

1 Ответ

10 голосов
/ 17 января 2012

Да, если вы действительно хотите сохранить все дополнительные / нераспознанные параметры, затем выполните что-то вроде этого:

public class MyBean {
    private String field1;
    private String field2;
    private Integer field3;
    private Map <String, Object> unknownParameters ;

    public MyBean() {
        super();
        unknownParameters = new HashMap<String, Object>(16);
    }

    // Getters & Setters here

    // Handle unknown deserialization parameters
    @JsonAnySetter
    protected void handleUnknown(String key, Object value) {
        unknownParameters.put(key, value);
    }
}

Чтобы настроить глобальную обработку параметров, вы можете выбрать реализацию реализации DeserializationProblemHandler и зарегистрируйте его глобально с помощью конфигурации ObjectMapper.

DeserializationProblemHandler handler = new MyDeserializationProblemHandler();
ObjectMapper.getDeserializationConfig().addHandler(handler);

Если вы обнаружите, что вы действительно не заботитесь о неизвестных параметрах, то вы можете просто включить ихвыкл.Для каждого класса с @JsonIgnoreProperties (ignoreUnknown = true) или глобально с помощью настройки ObjectMapper:

objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
...