我正在处理的项目通过MQ通过以下方式实现了
:example.json
{
"templateName": "testTemplate",
"to": [
"support@test.com"
],
"cc": [
"testCc@test.com
],
"bcc": [
"testBcc@test.com
],
"from": "testFrom@test.com",
"subject": "testSubject",
"replacementValues": {
"replacementValue1": "lorem",
"replacementValue2": "ipsum"
},
"jsonObject": {
//omitted for brevity
}
}
按原样,它将映射到以下对象:
NotificationV1.java
public class NotificationV1 {
private String templateName;
private List<String> to;
private List<String> cc;
private List<String> bcc;
private String from;
private String subject;
private Map<String, String> replacementValues;
private Map<String, String> images;
private Object jsonObject;
//getters & setters omitted for brevity
使用以下映射器:
//no special config
notificationMessage = new ObjectMapper().readValue(jsonMessage, EmailNotificationMessage.class);
作为项目范围重构的一部分,上面的数据类已更改为看起来像这样:
NotificationV2.java
public class NotificationV2 {
private EmailHeaders emailHeaders;
private TemplateData templateData;
//getters and setters omitted
EmailHeaders.java
public class EmailHeaders {
private String from;
private List<String> toAddresses;
private List<String> ccAddresses;
private List<String> bccAddresses;
private String subject;
//getters and setters omitted
TemplateData.java
public class TemplateData {
private String templateName;
private Map<String, String> replacementValues;
private Map<String, String> images;
private Object jsonObject;
//getters and setters omitted
自然地,现有的映射会在json和新对象中围绕无法识别的属性抛出错误;无法映射templateNAme,找不到emailHeaders和templateData,依此类推。我无法更改json的结构以适合新对象,但还没有找到演示上述用例的资源进行映射。是否可以在NotificationV2上使用批注和/或可以将某种映射器配置放在一起以便将所有这些挂钩起来?
答案 0 :(得分:1)
要展平嵌套的类,可以使用注释@JsonUnwrapped
。
示例:
public class Parent {
public int age;
public Name name;
}
public class Name {
public String first, last;
}
通常将按以下顺序进行序列化:
{
"age" : 18,
"name" : {
"first" : "Joey",
"last" : "Sixpack"
}
}
通过更新父级以使用@JsonUnwrapped,我们可以展平嵌套对象:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
这将输出以下内容:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
有关更多信息,请参见docs