私は本当に単純であるべきだと思うことをしようとしています。Question
spring-boot、spring-data-rest、spring-hateoas でセットアップされたオブジェクトがあります。すべての基本は正常に機能します。GET が myのURLList<Question>
とまったく同じ形式でを返すカスタム コントローラーを追加して、2 つの間の応答に互換性を持たせたいと考えています。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: オープン リソース アセンブラーを実装する
このオプションの問題は、 Spring-Hateoas のドキュメントQuestionResourceAssembler
に従って実装すると、最終的に が のほぼ複製になるパスが導かれ、アセンブラーが 2 つのオブジェクト間でデータを手動でコピーする必要があり、すべてをビルドする必要があることです。関連するものを手で。これは多くの無駄な努力のようです。QuestionResource
Question
_links
何をすべきか?
Spring は、QuestionRepository
. コントローラーからの出力がシームレスで、生成された応答と交換可能であることを確認するために、そのコードを利用して使用する方法はありますか?