Java 在SpringMVC中将值传递给控制器,有什么区别?
当我在一个旧项目中阅读一些用Spring MVC编写的代码时,我注意到作者使用两种类似的方法将值传递给控制器,如下所示:Java 在SpringMVC中将值传递给控制器,有什么区别?,java,spring,spring-mvc,web,Java,Spring,Spring Mvc,Web,当我在一个旧项目中阅读一些用Spring MVC编写的代码时,我注意到作者使用两种类似的方法将值传递给控制器,如下所示: @RequestMapping(value="/print") public String PrintInfo(@RequestParam("name") String name,@RequestParam("age") int age) { ....... } 或 它们都很好用。 区别在于它是否使用@RequestParam 那么他们之间的主要区别是什么?
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam("name") String name,@RequestParam("age") int age) {
.......
}
或
它们都很好用。
区别在于它是否使用@RequestParam
那么他们之间的主要区别是什么?哪一个更好,为什么?这听起来就像你在问“什么是
RequestParam
,我为什么要使用它?”
允许您将方法参数参数绑定到web请求参数。在没有任何其他属性的情况下,您的示例告诉Spring需要name
和age
参数,Spring将知道将这两个参数与传入请求相关联。您可以选择将required
设置为false
以使参数可选:
public String PrintInfo(@RequestParam("name", required = false) String name,
@RequestParam("age") int age) {
作为一项非常有用的功能,如果从请求中收到空值,还可以提供defaultValue
。因此,您可以:
public String PrintInfo(@RequestParam("name", defaultValue="John Doe") String name,
@RequestParam("age") int age) {
…而且你永远不会处理空名称
最后,使用它还可以进行一些神奇的类型转换,例如自动使用整数
类型。在您的示例中,您可以使用:
public String PrintInfo(@RequestParam("name") String name,
@RequestParam("age") Integer age) {
…Spring会自动将其装箱,而无需您做任何额外的工作
取消RequestParam
注释本身并没有什么错,但实际上您是在拒绝Spring启用这些功能,就像您在第二种情况下所做的那样
旁白:
@RequestMapping(value=“/print”)
可以更简单地写成@RequestMapping(“/print”)
如果请求参数的名称和方法参数的名称相等,那么Spring将自动按名称绑定参数。例如,您有传入的GET
请求:
http://localhost:8080/print?name=somename&age=30
和控制器方法:
@RequestMapping(value="/print")
public String PrintInfo(String name,int age) {
...
}
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam("user_name") String userName, @RequestParam("user_age")int userAge) {
...
}
在这种情况下,不需要为参数指定@RequestParam
注释。因为请求中的名称和方法args的名称相等
但是当名称不相等时,则需要显式地指定名称与
@RequestParam
的对应关系。例如:
http://localhost:8080/print?user_name=somename&user_age=30
和控制器方法:
@RequestMapping(value="/print")
public String PrintInfo(String name,int age) {
...
}
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam("user_name") String userName, @RequestParam("user_age")int userAge) {
...
}
因此,当请求参数名称和方法参数名称不同时,需要@RequestParam
来帮助Spring正确地进行绑定
实际上,许多开发人员总是使用
@RequestParam
,即使名称相等。例如,empty@RequestParam
:
@RequestMapping(value="/print")
public String PrintInfo(@RequestParam() String name, @RequestParam() int age) {
...
}
因为此注释显示参数来自请求,使代码更清晰易读。听起来您已经有了答案!