我正在从事的项目通过 MQ 实现以下内容:
示例.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
}
}
Run Code Online (Sandbox Code Playgroud)
按原样,它将映射到以下对象:
通知V1.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
Run Code Online (Sandbox Code Playgroud)
使用以下映射器:
//no special config
notificationMessage = new ObjectMapper().readValue(jsonMessage, EmailNotificationMessage.class);
Run Code Online (Sandbox Code Playgroud)
作为项目范围重构的一部分,上面的数据类已更改为如下所示:
通知V2.java
public class NotificationV2 {
private EmailHeaders emailHeaders;
private TemplateData templateData;
//getters and setters omitted
Run Code Online (Sandbox Code Playgroud)
电子邮件标题.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
Run Code Online (Sandbox Code Playgroud)
模板数据.java
public class TemplateData {
private String templateName;
private Map<String, String> replacementValues;
private Map<String, String> images;
private Object jsonObject;
//getters and setters omitted
Run Code Online (Sandbox Code Playgroud)
当然,现有的映射会围绕 json 中无法识别的属性与新对象抛出错误;无法映射 templateNAME,找到 emailHeaders 和 templateData,等等。我无法更改 json 的结构以适应新对象,但尚未找到演示上述映射用例的资源。我是否可以在NotificationV2上使用注释和/或可以将某种映射器配置放在一起以将所有这些连接起来?
要展平嵌套类,您可以使用注释@JsonUnwrapped。
例子:
public class Parent {
public int age;
public Name name;
}
public class Name {
public String first, last;
}
Run Code Online (Sandbox Code Playgroud)
通常会按如下方式序列化:
{
"age" : 18,
"name" : {
"first" : "Joey",
"last" : "Sixpack"
}
}
Run Code Online (Sandbox Code Playgroud)
通过更新父级以使用@JsonUnwrapped,我们可以展平嵌套对象:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
Run Code Online (Sandbox Code Playgroud)
这将输出以下内容:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Run Code Online (Sandbox Code Playgroud)
请参阅文档以获取更多信息
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |