Что вы используете для сериализации ответа на JSON?
Если вы используете Джексона, я бы рекомендовал использовать JSON Views, чтобы избежать нескольких DTO. Он позволяет вам указать, какие поля вы хотите сериализовать при каких обстоятельствах (так диктуется контроллером большую часть времени) и довольно прост в использовании.
Вот руководство по его использованию: https://www.baeldung.com/jackson-json-view-annotation
И пример того, как я его использую (например, с классом вложений):
Это модель, в которой я определяю, какой атрибут будет включен в какое представление :
public class Attachment {
@JsonView({
Attachment.Views.Show.class, Attachment.Views.List.class
})
private Long id;
@JsonView({
Attachment.Views.Show.class, Attachment.Views.List.class
})
private String originalFilename;
@JsonView({
Attachment.Views.Show.class
})
private String filepath;
@JsonView({
Attachment.Views.Show.class
})
private String description;
public static class Views {
public static class Show {}
public static class List {}
public static class Create {}
public static class Fill {}
public static class Edit {}
}
}
А вот и мой контроллер:
public class AttachmentControllerImpl implements AttachmentController {
@Inject
private AttachmentService service;
private ObjectMapper mapper;
@Override
public Response show(Long id) {
Attachment attachment = service.getById(id);
String json = mapper.writerWithView(Attachment.Views.Show.class).writeObjectAsString(attachment);
}
@Override
public Response list() {
List<Attachment> attachments = service.getAll();
String json = mapper.writerWithView(Attachment.Views.List.class).writeObjectAsString(attachments);
}
}
На самом деле, здесь не так уж и много чего, он очень прост в использовании.