如何将HTTP GET请求参数绑定到JavaBean对象变量?

如何将HTTP GET请求参数绑定到JavaBean对象变量?,java,spring,spring-mvc,Java,Spring,Spring Mvc,在此期间,我正在研究SpingMVC展示示例dowlodable form STS仪表板 在请求数据部分中,将演示如何将HTTP GET请求的参数绑定到JavaBean的同名变量 实际上,我有以下链接: <a id="group" class="textLink" href="<c:url value="/data/group?param1=foo&param2=bar&param3=baz" />"> Group of quer

在此期间,我正在研究SpingMVC展示示例dowlodable form STS仪表板

在请求数据部分中,将演示如何将HTTP GET请求的参数绑定到JavaBean的同名变量

实际上,我有以下链接:

 <a id="group" class="textLink" 
    href="<c:url value="/data/group?param1=foo&param2=bar&param3=baz" />">
       Group of query parameters
 </a>
withParamGroup()方法是一个JavaBean对象,它只是一个包含3个变量和getter/setter方法的对象,如下所示:

public class JavaBean {

    private String param1;
    private String param2;
    private String param3;

        // GETTER & SETTER method
}
因此HTTP请求中的param1参数存储在JavaBean对象的param1变量中,对于param2和param3也是如此

好的…我想这对我来说很清楚…但是…谁做这个手术?它是由Spring框架自动生成的吗

为什么我不必像在控制器方法中将单个HTTP请求参数与单个变量绑定时那样使用@RequestParam注释

另一个疑问是:HTTP参数名称必须与JavaBean变量相同,或者只是第一个参数值存储在JavaBean对象的第一个变量中

谢谢


Andrea

您可以使用控制器中的
@RequestParam
注释,其变量名用于Get URL。

有趣的是,Spring文档似乎缺少关于此功能的详细信息,但是SpringMVC文档中有一些观点似乎表明Spring负责在请求映射过程中应用此行为。文档中关于使用
@RequestParam
属性将请求参数绑定到方法参数(位于)的一节中提到了此功能:

如果目标方法参数类型不是字符串,则会自动应用类型转换。见第16.3.3.14节“方法参数和类型转换”

如果随后转到引用的部分,文档建议Spring()自动转换基本对象类型:

从请求(包括请求)中提取的基于字符串的值 参数、路径变量、请求头和cookie值可能会 需要转换为方法参数的目标类型或 字段(例如,将请求参数绑定到 @ModelAttribute参数),它们被绑定到。如果目标类型不是 字符串时,Spring会自动转换为适当的类型。全部的 支持int、long、Date等简单类型。你可以 通过WebDataBinder进一步定制转换过程(请参见 第16.3.3.15节“自定义WebDataBinder初始化”),或 向FormattingConversionService注册格式化程序(请参阅 第6.6节,“Spring 3字段格式”)

不幸的是,这似乎不能充分解释为什么要转换非基本对象类型,但文档可能不具备这些功能


关于属性名称是否必须与参数匹配的最后一点,这是一个猜测,因为我找不到任何文档支持它,但我会根据您使用此“功能”时遇到的行为进行猜测Spring将通过名称而不是请求中参数的顺序来将参数与属性相匹配。

他说这是自动完成的,不需要@RequestParam注释,他提出了这个问题来询问为什么以及由谁来匹配……例如,如果在我的JavaBean对象中有3个变量,分别命名为:var1、var2,var3我可以做以下事情:我将JavaBean ogject作为输入参数传递给我的控制器方法,我可以使用@RequestParam将param1 HTTP Req参数映射到var1,等等,每对paramX\varX?我明白了吗?
public class JavaBean {

    private String param1;
    private String param2;
    private String param3;

        // GETTER & SETTER method
}