2017-08-22 20 views
2

@RestController@RequestMapping("/api/my-resource")です。私は特定のエンティティを抽出するために@GetMappingを持っています。カンマで区切られた@PathVariablesでマップされたレストエンドポイント

@GetMapping(value = "/{firstId},{secondId}") 
public ResponseEntity<MyResourceDTO> findMyResource(
         @PathVariable Long firstId, @PathVariable String secondId) { 

    //here I have firstId == null and secondId == null 
} 

私は/,を交換する場合はすべてが正常に動作しますが、要件は、別の/を使用するのではありません。

私はこのメソッドに入ることができますが、どちらも@PathVariableがnullにマップされていることを確認できます。 Springはこの種のマッピングをサポートしていますか?私は何を間違えたのですか?

thisと似たようなことを達成したいと思いますが、Springを使用する必要があります。

編集:私はListで溶液を見てきましたが、私はIDが異なるタイプのものであるとして、それを使用したくないので、それは重複しません

。私はこの宣言を持つコントローラを考える<spring.version>4.3.6.RELEASE</spring.version>

+0

@Kayamanパラメータは異なる型のものなので重複していないので、リスト xenteros

+0

に入れないでください。どのSpringのバージョンを使用していますか? – Kayaman

+0

@Kayamanはい、ただし、エンドポイントでregexバリデーターを使用することはできません。違いがあります。 Springでは、そのエンドポイントに入るためにパラメータが一致する正規表現を指定することができます。問題がなければ、変数の代わりにparamsを使用しました。 – xenteros

答えて

2

を使用して

、あなたは区切り文字として_を使用して試すことができ、それが正常に動作する必要があります。

これは春のドキュメンテーションで一度読みましたが、今すぐリンクを見つけることができず、見つけたらすぐに追加します。

1

...

@GetMapping(value = "/this/that/find/{firstId},{secondId}") 
public ResponseEntity<String> findMyResource(@PathVariable int firstId, @PathVariable String secondId) { 
    return new ResponseEntity<>(""+ firstId + "-" + secondId, HttpStatus.OK); 
} 

を使用しています...このテストは合格:

だから、
@Test 
public void testWithCommaDelimitedPathVariables() throws Exception { 
    MvcResult mvcResult = mockMvc.perform(get("/this/that/find/1,a")) 
      .andExpect(status().isOk()) 
      .andReturn(); 

    Assert.assertEquals("1-a", mvcResult.getResponse().getContentAsString()); 
} 

を、@PathVariablesにマッピングされ、」残りのエンドポイントを宣言しますコンマで区切られた "はSpringによってサポートされています。あなたの現在の春バージョンでは春4.3.10.RELEASE

+0

それは面白いです。どのバージョンを使用していますか? – xenteros

+2

申し訳ありません、その重要な情報を追加していただけです:) – glytching

+0

それは私のマシンでは動作しないので、さらに面白いです。D – xenteros

関連する問題