我试图将某些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,其中Address字段也正确映射?
我已经使用了自定义地址反序列化器,如此处许多文章所述。但是,由于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'}}
有关更多信息,请阅读:
问题内容: 这是JDK的类方法。作者为什么将字段分配给局部变量? 上面和下面之间有什么区别?这与线程安全有关吗? 问题答案: 为了稍微扩展一下Michael的答案,我希望它可以确保该方法永不返回,而且还可以提供所提到的性能优势。 给出以下代码: 至少从理论上讲,在多线程代码中,可以将字段设置为第一次读取()和第二次读取之间,然后将其返回。我没有看过其余的代码,但是我假设还有其他可能被分配的地方。对
假设我有一个具有公共字段 和 的类 。假设我有另一个 pojo 类 ,但它使用 setter 和 getter,所以它有 setX() 和 setY()。 我想使用一些自动方法从实例复制到并返回。 至少使用默认设置,推土机的 未正确复制字段。 那么,是否有一个简单的配置更改可以让我使用Dozer或其他库来完成上述操作?
Java类(用作数据传输对象): 类资源还有一个名为的字段,它的getter和setter具有不同的类型,因此出现语法错误。 由于上面的类是一个DTO,一个JSON响应(带有字段)将映射到它,并且不能使用getId(),我想将字段更改为,并相应地更改getter和setter,并用一个注释标记它,说明bind this to字段。 注意:我用的是Spring靴。我尝试使用@JSONProperty
我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个
提前感谢!
目前,我的应用程序需要一些应该附加到日志消息中的值。由于它在SL4J下使用Log4J2,我的第一个想法是对Log4J记录器进行包装,在那里我可以向输出中添加新值。 一些博客指出我应该写一个日志,一个LoggerFactory和一个活页夹。但它们已经相当过时(2011年),并且不希望这些代码与当前的lib一起工作。 我还看到了一些关于线程上下文的东西,看起来像我想要构建这个测试。 所以我的问题是什么