我正在使用Jackson混合插件仅序列化特定字段。
我的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子类型“人”吗?
谢谢!
答案 0 :(得分:1)
最后弄清楚了问题所在。现在,测试将打印出我们想要的内容:
{
“id” : 0,
“person” : {
“email” : “a@c.com”,
“firstName” : “A”,
“lastName” : “C”
},
“action” : “CREATE”
}
错误出在TransactionLogExport
中。它需要说:
@JsonProperty("person")
Person getPerson();
代替:
@JsonProperty("person")
Person person();
即该方法需要以“ get”开始。