- 此问题在此处已有答案**:
Why does "@PathVariable" fail to work on an interface in SpringBoot [duplicate](1个答案)
5年前关闭。
使用Spring Boot,我想测试我的@RestController,除了我尝试使用@PathParam测试请求Map时,一切都很好。
这涉及到接口(在本例中是TestController),它包含请求Map的注解!如果我删除接口,一切都很好......看起来是个问题......
我的控制者:
public interface TestController {
@RequestMapping(value = "/bar/{foo}/baz", method = RequestMethod.GET)
String test(@PathVariable("foo") String foo);
@RestController
class TestControllerImpl implements TestController {
@Override
public String test(String foo) {
return foo;
}
}
}
我的测试:
@Test
public void notworkingtest() throws Exception {
//THIS TEST SHOULD WORK, BUT DON'T ...
final MockMvc mockMvc = ...
mockMvc.perform(get("/bar/{foo}/baz", "foovalue") // Or get("/bar/foovalue/baz")
.contentType("text/plain"))
.andExpect(status().is2xxSuccessful())
.andExpect(content().string("foovalue"));
}
@Test
public void strangeworkingtest() throws Exception {
//THIS TEST WORKS, BUT WHY ?!?
final MockMvc mockMvc = ...
mockMvc.perform(get("/bar/{foo}/baz", "WhatEverValue")
.param("foo", "foovalue") // This param should be useless ...
.contentType("text/plain"))
.andExpect(status().is2xxSuccessful())
.andExpect(content().string("foovalue"));
}
第二个测试是在我有. param("foo","foovalue")并保持get("/bar/{foo}/baz "," WhatEverValue ")的情况下工作的...
如果我删除控制器的接口,它的工作...
有人能给我解释一下吗?
谢谢
3条答案
按热度按时间3okqufwl1#
这里有两种方法:
1.更改终结点的URL:
1.使用正确的URL调用端点:
bkkx9g8r2#
你可以试试这个:
fwzugrvs3#
PathVariable不同于requestParam,因为pathVariable是URL的一部分。这就是为什么
.param("foo", "foovalue")
不会覆盖您的pathVariable,因为后者正在设置requestParam。请参阅@请求参数与@路径变量