如何使用@PathVariable到Pojo?

问题描述 投票:2回答:3

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

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

java spring web
3个回答
1
投票

看看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
}

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);
}

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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.