私はコントローラを持ってResourceProcessor<RepositorySearchesResource>
を実装しています。次のリクエストマッピングが含まれており、このリクエストマッピングの検索URIを作成する方法はprocess
です。私がそれをやったやり方は、私が文字列としてuriにパラメータ名を指定しているので、非常に脆いようです。パスを文字列として指定しています。Spring HATEOASでテンプレート検索リソースuriを構築する
理想的には、リクエストマッピングで定義されたパラメータ名を使用して検索URIを構築する方法を探しています。変更すると検索URIを変更する必要はありません。最後に、パスをURLで指定することを避けたいので、リクエストマッピングメソッド名やその他の手段に基づいて動的に構築できるかどうかはわかりません。
また、Pageable
TemplateVariable
も作成しないでください。
@RequestMapping(method = RequestMethod.GET, value = "/orders/search/exceptionsByDate")
public @ResponseBody ResponseEntity<?> getAllExceptionsByDate(Pageable pageable, @RequestParam BigDecimal earlyPickupDate, @RequestParam List<String> status, @RequestParam String costCenter) {
Page<OrderExceptionProjection> exceptions = orderService.getExceptions(pageable, earlyPickupDate, status, costCenter);
return ResponseEntity.ok(new Resources<>(exceptions));
}
@Override
public RepositorySearchesResource process(RepositorySearchesResource resource) {
TemplateVariable earlyPickupDate = new TemplateVariable("earlyPickupeDate", TemplateVariable.VariableType.REQUEST_PARAM, "Selects all records with earlyPickupDate >= to the value specified.");
TemplateVariable status = new TemplateVariable("status", TemplateVariable.VariableType.REQUEST_PARAM_CONTINUED, "Specifies the order status.");
TemplateVariable costCenter = new TemplateVariable("costCenter", TemplateVariable.VariableType.REQUEST_PARAM_CONTINUED, "Specified the cost center to return orders for.");
TemplateVariables vars = new TemplateVariables(earlyPickupDate, status, costCenter);
UriTemplate uri = new UriTemplate(resource.getId().getHref() + "exceptionsByDate", vars);
resource.add(new Link(uri, "exceptionsByDate"));
return resource;
}