Возможно ли с помощью Джексона десериализовать json с помощью шаблона Builder, а также с использованием метода установки и получения по умолчанию?
Мой объект создан с помощью Builder, который охватывает только обязательные (окончательные) поля, но у меня нетконечные поля с некоторыми значениями, которые также должны быть десериализованы с помощью сеттеров.
Вот пример, который выдает исключение при попытке десериализации его с:
new ObjectMapper().readValue(json, Foo.class);
json - представление jsonсериализуется с сериализатором Джексона по умолчанию, например:
objectMapper.writeValueAsString(foo);
class
@Getter
@Setter
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Foo.Builder.class)
public class Foo {
private final String key;
private final Long user;
private final String action;
private final String material;
private final String currency;
private Foo(String key, Long user, String action, String material, String currency) {
this.key = key;
this.user = user;
this.action = action;
this.material = material;
this.currency = currency;
}
public static class Builder {
private String key;
private Long user;
private String action;
private String material;
private String currency;
@JsonProperty("key")
public Foo.Builder withKey(String key) {
this.key = key;
return this;
}
@JsonProperty("user")
public Foo.Builder withUser(Long user) {
this.user = user;
return this;
}
@JsonProperty("action")
public Foo.Builder withAction(String action) {
this.action = action;
return this;
}
/// other 'with' setters....
}
@JsonProperty("state")
private int state;
@JsonProperty("stat")
private String stat;
@JsonProperty("step")
private String step;
}
Исключение, которое он выдает, например:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле «состояние» (класс com.Foo $ Builder), не помеченное как игнорируемое (5 известных свойств: «ключ», «пользователь», «действие», «материал», «валюта»,])
Если это невозможно, какой обходной путь самый дешевый?