我希望 Jackson 使用以下构造函数反序列化一个类:
public Clinic(String name, Address address)
反序列化第一个参数很容易。问题是地址被定义为:
public class Address {
private Address(Map<LocationType, String> components)
...
public static class Builder {
public Builder setCity(String value);
public Builder setCountry(String value);
public Address create();
}
}
并且构造如下:new Address.Builder().setCity("foo").setCountry("bar").create();
有没有办法从 Jackson 获取键值对以便自己构建地址?或者,有没有办法让 Jackson 使用 Builder 类本身?
最佳答案
只要你用的是Jackson 2+,那么现在就有built in support for this .
首先您需要将此注释添加到您的 Address
类中:
@JsonDeserialize(builder = Address.Builder.class)
然后你需要把这个注解添加到你的Builder
类中:
@JsonPOJOBuilder(buildMethodName = "create", withPrefix = "set")
如果您愿意将 Builder 的 create 方法重命名为 build,并且您的 Builder 的 setter 的前缀是 with,而不是 set,则可以跳过第二个注释。
完整示例:
@JsonDeserialize(builder = Address.Builder.class)
public class Address
{
private Address(Map<LocationType, String> components)
...
@JsonPOJOBuilder(buildMethodName = "create", withPrefix = "set")
public static class Builder
{
public Builder setCity(String value);
public Builder setCountry(String value);
public Address create();
}
}
关于java - jackson + build 者模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982340/