Я пытаюсь сделать что-то, что, по моему мнению, должно быть очень простым. У меня есть объект Question
, настройка с помощью spring -boot, spring-data-rest и spring-hateoas. Все основы работают нормально. Я хотел бы добавить настраиваемый контроллер, который возвращает List<Question>
в том же формате, что и GET на мой URL-адрес Repository
/questions
, чтобы ответы между ними были совместимы.
Вот мой контроллер:
@Controller
public class QuestionListController {
@Autowired private QuestionRepository questionRepository;
@Autowired private PagedResourcesAssembler<Question> pagedResourcesAssembler;
@Autowired private QuestionResourceAssembler questionResourceAssembler;
@RequestMapping(
value = "/api/questions/filter", method = RequestMethod.GET,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody PagedResources<QuestionResource> filter(
@RequestParam(value = "filter", required = false) String filter,
Pageable p) {
// Using queryDSL here to get a paged list of Questions
Page<Question> page =
questionRepository.findAll(
QuestionPredicate.findWithFilter(filter), p);
// Option 1 - default resource assembler
return pagedResourcesAssembler.toResource(page);
// Option 2 - custom resource assembler
return pagedResourcesAssembler.toResource(page, questionResourceAssembler);
}
}
Вариант 1. Положитесь на предоставленный SimplePagedResourceAssembler
Проблема с этой опцией в том, что ни один из необходимых _links
не отображается. Если бы это было исправлено, это было бы самым простым решением.
Вариант 2. Реализация моего ассемблера открытых ресурсов
Проблема с этим вариантом заключается в том, что реализация QuestionResourceAssembler
в соответствии с документацией Spring-Hateoas приводит к путь, где QuestionResource
оказывается почти дубликатом Question
, а затем ассемблер должен вручную скопировать данные между двумя объектами, а мне нужно вручную собрать все соответствующие _links
. Это кажется потраченным впустую.
Что делать?
Я знаю, что Spring уже сгенерировал код для всего этого при экспорте QuestionRepository
. Могу ли я подключиться к этому коду и использовать его, чтобы гарантировать, что вывод моего контроллера будет бесшовным и взаимозаменяемым с сгенерированными ответами?