java - 将 Json 字段包装到 pojo 的实例变量中

标签 java json spring jackson jackson2

我正在尝试将某些 json 字段映射到类实例变量。

我的示例 Person 类如下所示:

public class Person {
   private String name;
   private Address address;

   //many more fields 

   //getters and setters
}

示例地址类是:

public class Address {
   private String street;
   private String city;
   //many more fields 

   // getters and setters
}

要反序列化到我的 Person 类的 json 对象不包含“地址”字段。看起来像:

{
"name":"Alexander",
"street":"abc 12",
"city":"London"
}

有没有办法将 json 反序列化为地址字段也已正确映射的 Person pojo?

我使用了这里很多帖子中提到的自定义地址反序列化器。但是,它不会被调用,因为 Json 对象不包含“地址”字段。

我已经通过使用 JsonNode 手动映射每个字段解决了这个问题,但是在我的实际项目中,这不是一个好的解决方案。

使用 jackson 是否可以解决此类问题? 另外,如果之前有人问过这个问题,那么我代表我道歉,因为我已经深入搜索了解决方案并且可能还没有看到它。 .

最佳答案

@JsonUnwrapped 注释是针对这个问题引入的。型号:

class Person {
    private String name;

    @JsonUnwrapped
    private Address address;

    // getters, setters, toString
}
class Address {
    private String street;
    private String city;

    // getters, setters, toString
}

用法:

ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"Alexander\",\"street\":\"abc 12\",\"city\":\"London\"}";
System.out.println(mapper.readValue(json, Person.class));

打印:

Person{name='Alexander', address=Address{street='abc 12', city='London'}}

更多信息请阅读:

  1. Jackson Annotation Examples
  2. Annotation Type JsonUnwrapped
  3. Jackson JSON - Using @JsonUnwrapped to serialize/deserialize properties as flattening data structure

关于java - 将 Json 字段包装到 pojo 的实例变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370637/

相关文章:

java - 如何解决 'NoSuchBeanDefinitionException: No qualifying bean of type'错误?

spring - 为什么 Spring RestTemplate 在 Spring 中默认不是 Bean?

java - 密集的 GC Activity 暂时关闭服务

java - Java 调用 apache 的 xml-rpc 客户端后获取 XML 和 JSON 结果时出错 - 意外的非空白字符数据

java - 使用 POJO 作为 iReport 数据源

ios - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance

json - jq - 如何有条件地过滤掉对象

java - 处理多线程拆分器/聚合器编排内部的异常以转到聚合器而不是 MessagingGatewaySupport 的 errorChannel

java - Java 中的输出日志记录

java - "local variables are thread safe"有条件吗?