有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将@RequestParam映射到对象?

@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) 个答案

  1. # 1 楼答案

    如果你遇到:

    no matching editors or conversion strategy found

    这可能是因为在控制器方法中不必要地包含@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. # 2 楼答案

    依我看,你有什么事要做。 内容方法如下所示:

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

    restDTO应该有正确的setter。 你这么做的时候发生了什么

  3. # 3 楼答案

    方法: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);
    }