作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Jackson mixins 仅序列化特定字段。
我的 ObjectMapper 的配置如下:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.addMixIn(Person.class, SyncPerson.class);
mapper.addMixIn(TransactionLog.class, TransactionLogExport.class);
以下是与我要导出的 JSON mixin 对象配对的模型类:
// Model class
public class Person {
private Long id;
private String email;
private String firstName;
private String lastName;
}
// Desired JSON format. Excludes 'id' field
public interface SyncPerson {
@JsonProperty("firstName")
String getFirstName();
@JsonProperty("lastName")
String getLastName();
@JsonProperty("email")
String getEmail();
}
// Model class
public class TransactionLog {
private long id;
private Integer version;
private Person person;
private Date date;
private EntityAction action;
}
// Desired JSON format. Excludes 'id' field, 'version', 'date'
public interface TransactionLogExport {
@JsonProperty("id")
String getId();
@JsonProperty("person")
Person person();
@JsonProperty("action")
EntityAction getAction();
}
但是,我的测试显示 TransactionLog 的 person
属性未通过。
@Test
public void testWriteValue() throws Exception {
Person person = new Person();
person.setEmail("a@c.com");
person.setFirstName("A");
person.setLastName("C");
TransactionLog log = new TransactionLog();
log.setId(0L);
log.setAction(EntityAction.CREATE);
log.setPerson(person);
log.setStartValue("start");
log.setEndValue("end");
log.setChanges("change");
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(log);
System.out.println(prettyJson);
// Prints:
// {
// "id" : 0,
// "action" : "CREATE",
}
}
如果我尝试使用常规 ObjectMapper mapper = new ObjectMapper();
而不是 mixin 进行相同的测试,那么我会看到导出的完整对象,包括 Person
电子邮件、姓名等。所以我配置 mixin 的方式一定有问题......否则我会误解一些东西。
那么任何人都可以帮助指示我可以做什么来导出我的 mixin 中的子类型“person”吗?
谢谢!
最佳答案
终于解决这个问题了。现在测试打印出我们想要的内容:
{
“id” : 0,
“person” : {
“email” : “a@c.com”,
“firstName” : “A”,
“lastName” : “C”
},
“action” : “CREATE”
}
错误发生在 TransactionLogExport
中。需要说明的是:
@JsonProperty("person")
Person getPerson();
而不是:
@JsonProperty("person")
Person person();
即该方法需要以“get”开头。
关于java - 如何让 Jackson mixin 处理包含的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60208385/
我是一名优秀的程序员,十分优秀!