2017-08-10 3 views
0

私たちは、春の残りのAPIを使用しています。 いくつかのエンドポイントがあり、これはSOMEクエリパラメータで呼び出すことができます。すべてのクエリパラメータで呼び出されるエンドポイントと等しい文字列を返す方法

@RequestMapping(method = RequestMethod.GET) 
public ResponseEntity<List<SomeObject>> someMethod(@RequestParam(required = false) MultiValueMap<String, String> params) 

また、どのパラメータが受信されるかは事前にわかりません。 MultiValueMapを使用していて、それを処理しています。 しかし、応答では、このエンドポイントを表すStringをすべてのパラメータで返す必要があります。 は例えば、クライアントは、我々だけでこの文字列を返す必要が

/someendpoint?param1=value1&params2=value2&params3=[value3a,value3b] 

としてそれを呼び出す場合。 原因のために、この文字列をマップを通して繰り返し作成することができます。 しかし、私は春がよりエレガントな方法を持っていると思う。

答えて

2

以下を試すことができます。

@RequestMapping(method = RequestMethod.GET) 
public ResponseEntity<List<SomeObject>> someMethod(HttpServletRequest request, @RequestParam(required = false) MultiValueMap<String, String> params) { 

    String url = request.getRequestURL().toString() + (request.getQueryString() == null ? "" : "?" + request.getQueryString()); 
} 
2

Spring HATEOAS ControllerLinkBuilderをご覧ください。

多分、指定されたパラメータからURLを生成することができます。 Haventはそれを試みた。

List<Order> methodLinkBuilder = methodOn(YourController.class).someMethod(params); 
Link selfLink = linkTo(methodLinkBuilder).withRel("self"); 
関連する問題