Spring MVC参数绑定

一、参数绑定注解介绍

(1)Spring MVC中绑定数据的注解介绍

        Spring MVC中绑定数据的注解如下:

    1. @RequestParam     绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数或上传的文件。

    2. @PathVariable    绑定URL中的参数值

    3. @CookieValue    绑定Cookie参数

    4. @RequestHeader    绑定HTTP请求头参数

    5. @ModelAttribute    绑定Model参数

    6. @SessionAttributes    绑定Session参数

    7. @RequestBody    请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。

    8. @ResponseBody    将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视图处理部分,而是调用适合HttpMessageConverter,将返回值写入输出流。

    9. @RequestPart    绑定“multipart/form-data”参数。

二、参数绑定注解详解

(1)@RequestParam

        此注解用于绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数或上传的文件。

        它有三个属性:value、defaultValue、required。

        value    用于设置参数名。

        defaultValue    用于对参数设置默认值。

        required    用于设置是否必需值,默认为true。为true时,如果参数为空,会报错。

        demo1-post.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'demo1-post.jsp' starting page</title>
  </head>
  
  <body>
    <form method="post" action="/web/paramBind/demo1">
     <input type="text" name="username" value="zhangsan" />
     <input type="submit" value="提交" />
    </form>
  </body>
</html>

        Controller部分代码如下所示:

@Controller
@RequestMapping("/paramBind")
public class ParamBindController {

 @RequestMapping(value={"/demo1-post"})
 public ModelAndView demo1(){
  ModelAndView modelAndView= new ModelAndView();
  modelAndView.setViewName("demo1-post");
  
  return modelAndView;
 }

 @RequestMapping(value={"/demo1"})
 public ModelAndView demo1(@RequestParam(value="username") String username,@RequestParam(value="id",defaultValue="1",required=false) Integer id){
  ModelAndView modelAndView= new ModelAndView();
  modelAndView.addObject("username", username);
  modelAndView.addObject("id", id);
  modelAndView.setViewName("demo1-success");

  return modelAndView;
 }

}

        demo1-success.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'demo1-success.jsp' starting page</title>
 </head>
  
  <body>
    用户名为:${username}
    <br />
    Id为:${id}
  </body>
</html>

        操作步骤和结果如下图所示:

Spring MVC参数绑定_第1张图片

Spring MVC参数绑定_第2张图片

(2)@PathVariable

        此注解用于绑定URL中的参数值。它只有一个属性值value。

        Controller部分代码如下所示:

@Controller
@RequestMapping("/paramBind")
public class ParamBindController {

 @RequestMapping(value={"/demo2/{id}"})
 public ModelAndView demo2(@PathVariable(value="id") Integer id){
  ModelAndView modelAndView= new ModelAndView();
  modelAndView.addObject("id", id);
  modelAndView.setViewName("demo2");
  
  return modelAndView;
 }

}

        demo2.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'demo2.jsp' starting page</title>
  </head>
  
  <body>
    id值为:${id }
  </body>
</html>

        运行结果如下图所示:

        Spring MVC参数绑定_第3张图片

(3)@CookieValue

        此注解用于绑定Cookie参数。

        Controller部分代码如下所示:

@Controller
@RequestMapping("/paramBind")
public class ParamBindController {
  
// @CookieValue示例
 @RequestMapping(value={"/initCookie"})
 public ModelAndView initCookie(HttpServletResponse response){
  ModelAndView modelAndView= new ModelAndView();
  response.addCookie(new Cookie("coolieId", "123456"));
  modelAndView.setViewName("demo3-initCookie");
  
  return modelAndView;
 }
 
 @RequestMapping(value={"/demo3"})
 public ModelAndView demo3(@CookieValue(value="coolieId",defaultValue="",required=false) String coolieId){
  ModelAndView modelAndView= new ModelAndView();
  modelAndView.addObject("coolieId", coolieId);
  modelAndView.setViewName("demo3");
  
  return modelAndView;
 }
}

        在/paramBind/initCookie中设置cookie,在/paramBind/demo3中读取cookie。

        执行结果如下图所示:

        

(4)@RequestHeader

        此注解用于绑定HTTP请求头参数。

        Controller中部分代码如下所示:

@Controller

@RequestMapping("/paramBind")

public class ParamBindController {
 
// @RequestHeader示例
 @RequestMapping(value={"/demo4"})
 public ModelAndView demo4(@RequestHeader(value="User-Agent",defaultValue="",required=false) String userAgent){
  ModelAndView modelAndView= new ModelAndView();
  modelAndView.addObject("userAgent", userAgent);
  modelAndView.setViewName("demo4");

  return modelAndView;
 }

}

        运行结果如下所示:

        

(5)@ModelAttribute

        此注解用于绑定Model参数。Model中数据的作用域是Requets级别的,也就是说在一个Request请求中是获取不到其它Request请求的Model的。

        首先创建一个model,如User.java,代码如下:

package com.uni2uni.model;
public class User {
 private Integer id;
 private String username;
 private String password;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}

        Controller的部分代码如下所示:

@Controller
@RequestMapping("/paramBind")
public class ParamBindController {
 
// @ModelAttribute示例
 @RequestMapping(value={"/demo5-post"})
 public String demo5post(){
  
  return "demo5-post";
 }
 
 @RequestMapping(value={"/demo5"},method={RequestMethod.POST})
 public String demo5(@ModelAttribute("user") User user){
  
  return "demo5";
 }
}

        demo5-post.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'demo1-post.jsp' starting page</title>
  </head>
  
  <body>
    <form modelAttribute="user" method="post" action="/web/paramBind/demo5">
     <input type="text" name="username" value="zhangsan" />
     <input type="password" name="password" value="111" />
     <input type="submit" value="提交" />
    </form>
  </body>
</html>

        demo5.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
  </head>
  <body>
    用户名是:${user.username }
    <br/>
    密码是:${user.password }
  </body>
</html>

        操作结果如下图所示:

Spring MVC参数绑定_第4张图片

Spring MVC参数绑定_第5张图片

(6)@SessionAttributes

        此注解用于绑定Session参数。与其它注解不同的是,@SessionAttributes(value="sessionId")是在Controller上加的。如下所示:

@Controller
@RequestMapping("/paramBind")
@SessionAttributes(value="sessionId")
public class ParamBindController {
}

        设置Session的代码如下所示:

 @RequestMapping(value={"/initSession"})
 public String initSession(HttpServletRequest request){
  request.getSession().setAttribute("sessionId", "111111");
  return "demo6-initSession";
 }

        demo6.jsp代码如下所示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
  </head>
  <body>
    Session的值为:${sessionId }
  </body>
</html>

        执行结果如下图所示:

        

(7)@RequestBody

        此注解用于将请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。

(8)@ResponseBody 

        将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视图处理部分,而是调用适合HttpMessageConverter,将返回值写入输出流。一般返回json或xml。

        Controller中部分代码如下所示:

 @RequestMapping(value={"/demo7"})
 public @ResponseBody User demo7(){
  User user= new User();
  user.setId(1);
  user.setUsername("zhangsan");
  user.setPassword("111");
 
  return user;
 }

        返回Json如下所示:

{"id":1,"username":"zhangsan","password":"111"}

(9)@RequestPart

        此注解用于绑定“multipart/data”参数。

你可能感兴趣的:(Spring MVC参数绑定)