У меня есть этот метод для запроса GET со встроенным параметром.Основная идея заключается в том, что если ссылка содержит? Внедренный = true, она возвращает сущность, а если она не соответствует истине, то возвращает объект DTO:
@GetMapping("/todos")
public List<Resource<?>> getAllToDoNote(@RequestParam(value = "embedded",required =false)String embedded){
List<Resource<ToDoNote>> noteResources = new ArrayList<Resource<ToDoNote>>();
List<ToDoNote> allNotes = toDoNoteService.getAllToDoNote();
if(embedded!=null && embedded.equals("true")) {
for(int i=0; i< allNotes.size();i++) {
Resource<ToDoNote> noteResource = new Resource<>(allNotes.get(i));
//Link linkTo = linkTo(methodOn(this.getClass()).getNotesUsers(allNotes.get(i).getId())).withRel("users");
//noteResource.add(linkTo);
noteResources.add(noteResource);
}
//return toDoNoteService.getAllToDoNote();
return noteResources;
}
else {
//System.out.println("embedded " +embedded);
List<Resource<ToDoNoteDTO>> dtoResources = new ArrayList<Resource<ToDoNoteDTO>>();
notes = toDoNoteService.getAllToDoNote();
List<ToDoNoteDTO> noteDtos = new ArrayList<ToDoNoteDTO>();
for(int i=0; i<notes.size(); i++) {
//System.out.println("size" +notes.get(i).getName());
noteDtos.add(convertToDto(notes.get(i)));
}
for(int i=0; i< noteDtos.size();i++) {
Resource<ToDoNoteDTO> dtoResource = new Resource<>(noteDtos.get(i));
Link linkTo = linkTo(methodOn(this.getClass()).getNotesUsers(allNotes.get(i).getId())).withRel("users");
dtoResource.add(linkTo);
dtoResources.add(dtoResource);
}
return dtoResources;
//return null;
}
}
@Validated
public class ToDoNote {
private Integer id;
@NotNull(message = "Name may not be null")
private String name;
@JsonFormat(pattern="yyyy-MM-dd")
private Date dateToComplete;
private String description;
private Integer priority;
private Boolean completed;
private ArrayList<User> users;
....
}
public class ToDoNoteDTO {
private Integer id;
@NotNull(message = "Name may not be null")
private String name;
@JsonFormat(pattern="yyyy-MM-dd")
private Date dateToComplete;
private String description;
private Integer priority;
private Boolean completed;
....
}
Однако я получаю ошибки в возвращаемых строках: Типошибка: невозможно преобразовать из списка > в список >.Если я ставлю вопросительные знаки везде, это позволяет мне запустить программу, однако тогда она возвращает ссылки с другими полями, которые являются нулевыми.Есть ли какие-либо другие методы о том, как вернуть два разных типа?Поскольку мне нужно либо вернуть полную сущность, либо DTO, который не содержит все поля.
РЕДАКТИРОВАТЬ
Я смог заставить его работать, используя Ресурсы>однако вместо List теперь есть свойство _embedded, и после небольшого поиска, кажется, нет способа его удалить.Так что я просто хотел бы получить некоторые идеи о том, как обрабатывать этот случай, когда отвечать различными сущностями на основе данного встроенного параметра.Спасибо.
EDIT2 Добавлены сущность и класс DTO.