Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将@RequestParam映射到对象?_Java_Spring_Rest - Fatal编程技术网

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

Java 如何将@RequestParam映射到对象?,java,spring,rest,Java,Spring,Rest,我可以直接将所有的@RequestParam映射到一个java对象中吗 @RequestMapping(method = RequestMethod.GET) @ResponseBody public String content( @RequestParam int a, @RequestParam String b, ... @RequestParam String n; ) { } 我认为你有什么事要做。 内容方法如下所示: public

我可以直接将所有的
@RequestParam
映射到一个java对象中吗

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

}

我认为你有什么事要做。 内容方法如下所示:

public class RestDTO {
   private int a;
   private String b;
   private String n;
}
restDTO应该有正确的设置器。
这样做时发生了什么?

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

public String content(@RequestParam RestDTO restDTO){...}
方法:2 或者,如果您仍然希望使用GET方法,则向RestDto添加一个构造函数,如下所示

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String content( @RequestBody RestDto restDto) {
 ....
}
控制器中的用户调用构造函数,如下所示:

public RestDto {
    public RestDto(int a, String b, String n){
     this.a = a;
     this.b = b;
     this.n = n;
   }
}
如果您遇到:

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

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

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

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

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

}

是的,您的对象必须是POJO,具有正确的getter和setter。否则你就不必对它做任何事了。您的类(RestDTO)必须具有public void setA(int a)、public int getA()、public void setB(字符串b);公共字符串getB()。。。很好,很好。但是我也可以定义
@RequestParam(defaultValue=…)
该数据的属性的默认值吗?在我的观点中,non-defaultValue必须只是一个字符串,但是如果RequestParam丢失,则参数的值为null如果
restDTO
param始终为null,您知道该怎么办吗?您的意思是什么?restDTO为null是正常情况还是不正常?如果是,则业务驱动您必须执行的操作(转发到错误页或其他…),如果不是,唯一的解决方案是在restdt之前找到bu i thinkadding@RequestParam以使对象为空。格伦如何解释它的工作原理
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;}

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

}