如何将@RequestParam映射到对象?

时间:2015-01-20 08:09:44

标签: java spring rest

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String content(
      @RequestParam int a,
      @RequestParam String b,
      ...
      @RequestParam String n;
) {

}

我可以以某种方式直接将所有@RequestParam映射到java对象中,例如?

public class RestDTO {
   private int a;
   private String b;
   private String n;
}

3 个答案:

答案 0 :(得分:10)

在我看来,你有什么事可做。 内容方法将是这样的:

public String content(@RequestParam RestDTO restDTO){...}

休息DTO应该有正确的二传手。 当你这样做时发生了什么?

答案 1 :(得分:1)

如果遇到:

  

找不到匹配的编辑器或转换策略

可能是因为您在控制器方法中不必要地包含@RequestParam

确保作为请求参数接收的属性在目标对象上具有getter和setter(在本例中为请求参数abn):

public class RestDTO {

    private int a;
    private String b;
    private String n;

    public int getA() {return a;}
    public void setA(int a) {this.a = a;}

    public int getB() {return b;}
    public void setB(int b) {this.b = b;}

    public int getC() {return c;}
    public void setC(int c) {this.c = c;}

}

将目标对象添加为控制器方法中的参数,但使用@RequestParam进行注释。将为每个匹配的请求参数调用目标对象的setter方法。

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String content(RestDTO restDto) {

}

答案 2 :(得分:-4)

方法:1 您需要将方法更改为POST,并且可以将DTO对象作为参数接收到控制器方法,如下所示。使用GET方法你无法实现它,因为GET不会有身体。

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String content( @RequestBody RestDto restDto) {
 ....
}

<强>的方法:2 或者如果您仍想使用GET方法,则将构造函数添加到RestDto,如下所示

public RestDto {
    public RestDto(int a, String b, String n){
     this.a = a;
     this.b = b;
     this.n = n;
   }
}

然后你的控制器会调用构造函数,如下所示:

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String content(
    @RequestParam int a,
    @RequestParam String b,
     ...
    @RequestParam String n;
) {
   RestDto restDto = new RestDto(a,b,n);
}