我已经创建了这样的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!
为什么呢?怎么解决?感谢。
答案 0 :(得分:1)
查看@PathVariable
上的Spring Refererence Docs:
@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
}
答案 1 :(得分:0)
您需要明确地将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);
}
答案 2 :(得分:0)
@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);
}