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