在此期间,我正在研究Sping MVC展示示例可下载的STS仪表板。
在Request Data部分中显示了如何将HTTP GET请求的参数绑定到JavaBean的同名变量。
在实践中,我有以下链接:
<a id="group" class="textLink"
href="<c:url value="/data/group?param1=foo¶m2=bar¶m3=baz" />">
Group of query parameters
</a>
此链接为“/ data / group”URL生成GET HTTP请求。该请求带有3个参数,名为param1,param2,param3。
此请求由我的控制器类的以下方法处理:
@RequestMapping(value="group", method=RequestMethod.GET)
public @ResponseBody String withParamGroup(JavaBean bean) {
return "Obtained parameter group " + bean;
}
withParamGroup()方法解决了一个JavaBean对象,该对象只是一个包含3个变量和getters / setters方法的对象,如下所示:
public class JavaBean {
private String param1;
private String param2;
private String param3;
// GETTER & SETTER method
}
因此,HTTP请求中的param1参数存储在JavaBean对象的param1变量中,对于param2和param3也是如此。
好的......我认为这对我来说很明显......但......谁做了这个操作?它是由Spring框架自动生成的吗?
为什么我在控制器方法中使用单个变量绑定单个HTTP Request参数时,不会像使用@RequestParam注释那样使用?
另一个疑问是:HTTP参数名称必须与JavaBean变量相同,或者只是第一个参数值存储在JavaBean对象的第一个变量中?
由于
安德烈
答案 0 :(得分:2)
有趣的是,Spring文档似乎在有关此功能的细节上有些缺点,但Spring MVC文档中有一些内容似乎表明Spring负责在请求映射过程中应用此行为。文档中有关使用@RequestParam
属性将请求参数绑定到方法参数(位于here)的部分中引用了此功能:
如果目标方法参数类型不是String,则会自动应用类型转换。请参见第16.3.3.14节“方法参数和类型转换”。
如果您转到引用的部分,文档建议Spring(here)自动转换原始对象类型:
从请求中提取的基于字符串的值,包括请求 参数,路径变量,请求标头和cookie值可以 需要转换为方法参数的目标类型或 字段(例如,将请求参数绑定到字段中的字段) @ModelAttribute参数)他们被绑定了。如果目标类型不是 String,Spring自动转换为适当的类型。所有 支持简单类型,如int,long,Date等。您可以 通过WebDataBinder进一步自定义转换过程(请参阅 第16.3.3.15节“自定义WebDataBinder初始化”)或通过 使用FormattingConversionService注册Formatters(请参阅 第6.6节“Spring 3字段格式”)。
不幸的是,这似乎没有给出为什么非原始对象类型被转换的充分解释,但是文档可能不是最新的。
关于属性名称是否必须与参数匹配的最后一点 - 这是猜想,因为我找不到支持它的任何文档,但我会根据你在使用Spring的这个“特性”所遇到的行为来猜测将根据名称而不是请求的参数顺序来查看参数与属性的匹配。
答案 1 :(得分:0)
您可以在控制器中使用@RequestParam
注释,并在Get URL中使用变量Name。