使用逗号分隔的@PathVariables映射的Rest端点

时间:2017-08-22 12:29:14

标签: java spring rest spring-web

@RestController @RequestMapping("/api/my-resource")。我有@GetMapping来提取某个实体。

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

2 个答案:

答案 0 :(得分:2)

使用您当前的Spring版本,您可以尝试使用_作为分隔符,它应该可以正常工作。

我在Spring文档中读过一次,但现在找不到链接,我会在找到它后立即添加。

答案 1 :(得分: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映射的&#34; Rest端点用逗号分隔&#34;得到了Spring的支持。

使用Spring 4.3.10.RELEASE