Я использую миксины Джексона только для сериализации из определенных c полей.
Мой 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();
}
Тем не менее, мои тесты показывают, что атрибут person
TransactionLog не проходит.
@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
с электронной почтой, именами и т. Д. c. Так что, должно быть, что-то не так с тем, как я настроил миксин ... или я что-то неправильно понимаю.
Так что кто-нибудь может помочь указать, что я могу сделать, чтобы экспортировать подтип 'person' в мой миксин ?
Спасибо!