Один из моих классов имеет 3 свойства одного типа. Сейчас я пытаюсь сериализовать его, выполняя JSON, но одно из этих свойств нужно сериализовать по-другому - в основном одно из этих свойств является «внутренним», и мне нужен только его идентификатор, остальные должны быть полностью сериализованы.
Что я дошел до сих пор:
@NoArgsConstructor @AllArgsConstructor @Data
public static class Id {
@JsonView(View.IdOnly.class) private long id;
}
@NoArgsConstructor @AllArgsConstructor @Data
public static class Company extends Id {
@JsonView(View.Tx.class) private String name;
@JsonView(View.Tx.class) private String address;
}
@NoArgsConstructor @AllArgsConstructor @Data
public static class Transaction {
@JsonView(View.Tx.class) private Company from;
@JsonView(View.Tx.class) private Company to;
@JsonView(View.IdOnly.class) private Company createdBy;
}
public static class View {
public interface Tx extends IdOnly {}
public interface IdOnly {}
}
И быстрый тест для него:
@Test
void test() throws JsonProcessingException {
Company s = new Company("Source", "address_from");
Company d = new Company("Destination", "address_to");
final Transaction t = new Transaction(s, d, s);
final ObjectMapper m = new ObjectMapper();
System.out.println(m.writerWithDefaultPrettyPrinter().withView(View.Tx.class).writeValueAsString(t));
}
И вывод:
{
"from" : {
"id" : 0,
"name" : "Source",
"address" : "address_from"
},
"to" : {
"id" : 0,
"name" : "Destination",
"address" : "address_to"
},
"createdBy" : {
"id" : 0,
"name" : "Source",
"address" : "address_from"
}
}
Сейчас вопрос, как настроить сериализацию свойства createBy
? Мне нужен следующий вывод:
{
"from" : {
"id" : 0,
"name" : "Source",
"address" : "address_from"
},
"to" : {
"id" : 0,
"name" : "Destination",
"address" : "address_to"
},
"createdBy" : {
"id" : 0,
}
}