我已经创建了这样的POJO。
public class Param(){
@NotNull
private Sring paraA;
@NotNull
private Sring paraB;
//Setter and getter
}
我想用JSR303
来检查它。
@RequestMapping(value = "/test/{paraA}/{paraB}")
@ResponseBody
public BaseJsonRsp test(@PathVariable @Valid Param param) {
//doSomething
}
但是这段代码不起作用,我有以下错误
HTTP Status 500 - Missing URI template variable 'value' for method parameter of type PatchValue!
为什么?怎么解决?谢谢。
看看Spring Refererence Docs上的@PathVariable
:
@PathVariable参数可以是任何简单类型,例如int,long,Date等。
如果你想使用你的Param
类型作为控制器方法参数,你将无法使用@PathVariable
这样做。
或者,您可以将参数映射到单个String
变量(使用@PathVariable
),然后在此之后手动构建Param
。请注意,@PathVariable
假定您的URL中的占位符默认情况下与变量名称相同。如果您的变量名称不匹配,您可以执行类似的操作
@RequestMapping(value = "/test/{paraA}/{paraB}")
@ResponseBody
public BaseJsonRsp test(@PathVariable("paraA") String myParam,
@PathVariable("paraB") String otherParam) {
//doSomething
}
您需要将URL中的变量值显式设置为Param对象。
@RequestMapping(value = "/test/{paraA}/{paraB}")
@ResponseBody
public BaseJsonRsp test(@PathVariable("paraA") String paramA, @PathVariable("paraB") String paramB) {
Param param = new Param(paramA, paramB);
}
@PathVariable假定您的URL中的占位符默认情况下与变量名称相同。你需要这样做
@RequestMapping(value = "/test/{paraA}/{paraB}")
@ResponseBody
public BaseJsonRsp test(@PathVariable("paraA") String paramA,
@PathVariable("paraB") String otherparam) {
Param param = new Param(paramA, paramB);
}