Spring boot 使用SpringBoot重新加压strage行为
问题陈述-从重新启动的测试用例发送的路径参数接收为空。Spring boot 使用SpringBoot重新加压strage行为,spring-boot,rest-assured,Spring Boot,Rest Assured,问题陈述-从重新启动的测试用例发送的路径参数接收为空。 API定义如下: @RequestMapping("myapp") public interface MyApi { @GetMapping(path = "getItem/{path1}/{path2}/{path3}") public ResponseEntity<MyResponse> getItem(@PathVariable("path1")
API定义如下:
@RequestMapping("myapp")
public interface MyApi {
@GetMapping(path = "getItem/{path1}/{path2}/{path3}")
public ResponseEntity<MyResponse> getItem(@PathVariable("path1") String path1,
@PathVariable("path2") String path2, @PathVariable("path3") String path3);
}
@RestController
public class MyController implements MyApi {
public ResponseEntity<MyResponse> getItem(String path1, String path2, String path3) {
return myService.delegateToMethod(path1, path2, path3);
}
}
存根类的一部分
public MyResponse callGetItem(String param1, String param2, String param3) {
return given().port(servicePort)
.pathParam("path1", param1)
.pathParam("path2", param2)
.pathParam("path3", param3)
.when().get("/myapp/getItem/{path1}/{path2}/{path3}")
.then().statusCode(200)
.extract()
.as(MyResponse.class);
}
观察测试断言失败。通过将调试点放在控制器类中,我看到路径值被接收为null
有趣的是如果我将API定义直接放在控制器中,它会工作
免责声明代码为简洁起见,应根据要求在章节上展开。
请求如果重复问题或错误,请求重新指示。您需要将
@RestController
放在API定义以及实现控制器上
@RestController
@RequestMapping("myapp")
public interface MyApi {
@GetMapping(path = "getItem/{path1}/{path2}/{path3}")
public ResponseEntity<MyResponse> getItem(@PathVariable("path1") String path1,
@PathVariable("path2") String path2, @PathVariable("path3") String path3);
}
同样的代码,升级到spring boot版本
2.4.5
,工作正常。尝试将参数值存储在Map对象中,并将其传递给。pathParams(Map Map)
方法,而不是多次调用同一方法
@RestController
@RequestMapping("myapp")
public interface MyApi {
@GetMapping(path = "getItem/{path1}/{path2}/{path3}")
public ResponseEntity<MyResponse> getItem(@PathVariable("path1") String path1,
@PathVariable("path2") String path2, @PathVariable("path3") String path3);
}
http://localhost:8080/myapp/getItem/{path1}/{path2}/{path3}?path1=v1&path2=v2&path3=v3