2016-05-12 6 views
2

私はコントローラを持ってResourceProcessor<RepositorySearchesResource>を実装しています。次のリクエストマッピングが含まれており、このリクエストマッピングの検索URIを作成する方法はprocessです。私がそれをやったやり方は、私が文字列としてuriにパラメータ名を指定しているので、非常に脆いようです。パスを文字列として指定しています。Spring HATEOASでテンプレート検索リソースuriを構築する

理想的には、リクエストマッピングで定義されたパラメータ名を使用して検索URIを構築する方法を探しています。変更すると検索URIを変更する必要はありません。最後に、パスをURLで指定することを避けたいので、リクエストマッピングメソッド名やその他の手段に基づいて動的に構築できるかどうかはわかりません。

また、PageableTemplateVariableも作成しないでください。

@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; 
} 

答えて

1

あなたはこのように、注釈の引数としてRequestParamsの名前を定義する必要があります。TemplateVariablesを定義する際に

private static final String EARLY_PICKUP_DATE_PARAM = "earlyPickupDate"; 
private static final String STATUS_PARAM = "status"; 
private static final String COST_CENTER_PARAM = "costCenter"; 

@RequestMapping(method = RequestMethod.GET, value = "/orders/search/exceptionsByDate") 
public @ResponseBody ResponseEntity<?> getAllExceptionsByDate(Pageable pageable, 
    @RequestParam(EARLY_PICKUP_DATE_PARAM) BigDecimal earlyPickupDate, 
    @RequestParam(STATUS_PARAM) List<String> status, 
    @RequestParam(COST_CENTER_PARAM) 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(EARLY_PICKUP_DATE_PARAM, TemplateVariable.VariableType.REQUEST_PARAM, "Selects all records with earlyPickupDate >= to the value specified."); 
    TemplateVariable status = new TemplateVariable(STATUS_PARAM, TemplateVariable.VariableType.REQUEST_PARAM_CONTINUED, "Specifies the order status."); 
    TemplateVariable costCenter = new TemplateVariable(COST_CENTER_PARAM, 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; 
} 
関連する問題