2017-01-19 1 views
1

У меня есть сериализуемый объект с большим количеством полей, некоторые из которых являются обязательными, а другие необязательны. Чтобы этот объект был прост в использовании, я сделал снимок на Builder Pattern with a Twist. Это отлично работает, но некоторые из полученных Builder методов принимают более одного параметра. Вот пример:Есть аннотации, похожие на @JsonCreator для сеттеров, которые принимают более одного параметра?

@JsonProperty("foo") 
public Builder setFoo(String foo) { 
    this.foo = foo; 
    return this; 
} 

public Builder setBarAndZip(@JsonProperty("bar") String bar, @JsonProperty("zip") String zip) { 
    this.bar = bar; 
    this.zip = zip; 
    return this; 
} 

При условии я аннотирование моего родительском класса (класс, что этот строитель создает) с @JsonDeserialize(builder = MyClass.Builder.class), Джексон обрабатывает foo без каких-либо проблем. Однако он не вызывает setBarAndZip(...), и, как следствие, ни bar, ни zip не десериализуются.

Я обнаружил, что могу обойти это, поставив свои аннотации @JsonProperty непосредственно на частные поля строителя, а не на сеттеры, поэтому у меня есть работа, но есть ли лучший способ?

Конструкторы могут принимать несколько параметров с помощью аннотации @JsonCreator. Есть ли эквивалентная аннотация, которую я мог бы применить к setBarAndZip(...), что позволило бы Джексону просмотреть аннотации @JsonProperty по своим параметрам?

ответ

0

С jackson-user Google Groups страницы:

Tatu Saloranta

Нет, в настоящее время не существует никакого способа, чтобы иметь то, что составляет нескольких аргументов сеттеров. С точки зрения аннотации должно быть возможно использовать @JsonSetter для таких методов, но внутри они еще не поддерживаются. Было бы неплохо поддержать, но , вероятно, потребует много работы из-за внутренних предположений, что каждый метод setter обрабатывает только одно свойство.

- + Tatu + -

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