如何使用@PathVariable到Pojo?

时间:2016-08-21 03:02:10

标签: java spring web

我已经创建了这样的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!

为什么呢?怎么解决?感谢。

3 个答案:

答案 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);
 }
相关问题