java - jackson + build 者模式?

我希望 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/

相关文章:

c# - 使用 Web API 返回匿名类型

ruby-on-rails-3 - gem install json -v 1.7.3 给出 'Pl

javascript - 将 JSON 对象转换为 pretty-print 的 JSON 的 An

java - 将 PostgreSQL JSON 列映射到 Hibernate 实体属性

java - 使用 jackson 的 ObjectMapper 的 JSON 对象的顺序

python - 读取相当大的 JSON 文件

java - 如何使用 Gson 解析 JSON 数组

java - 如何从 Java HTTPResponse 解析 JSON?

java - gson.toJson() 抛出 StackOverflowError

json - ASP.net MVC 返回 JSONP