SpringMVC请求参数的处理

一、默认方式获取请求参数

直接给方法入参写一个和请求参数名相同的变量,这个变量就可以接收请求的参数值

<a href="request1?username=张三">获取请求参数a>
    @RequestMapping(value = "/request1")
    public String request1(String username){
     
        System.out.println(username);
        return "success";
    }

二、@RequestParam获取请求参数的值

@RequestParam可以获取请求的指定参数的值,默认参数必须存在。

它有三个属性:

  • value:指定要获取的参数的key
  • required:指定这个参数是否是必须的
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(@RequestParam(value = "user", required = false, defaultValue = "null") String username){
       //就相当于username=request.getParameter("user")
        System.out.println(username);
        return "success";
    }

要注意@PathVariable是获取路径中参数的值(/user/{id}),@RequestParam是获取请求的参数的值(?username=XXX)。

三、@RequestHeader获取请求头中的值

@RequestHeader("User-Agent")可以获取浏览器的信息,相当于userAgent=request.getHeader("User-Agent")

它也有三个值:

  • value:参数的值
  • required:是否必须
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(@RequestHeader("User-Agent") String UserAgent,@RequestParam(value = "user", required = false, defaultValue = "null") String username){
       //就相当于username=request.getParameter("user")
        System.out.println(username);
        System.out.println(UserAgent);
        return "success";
    }

四、@CookieValue获取请求中某个Cookie的值

它也有三个值:

  • value:参数的值
  • required:是否必须
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(
            @RequestHeader("User-Agent") String UserAgent,
            @RequestParam(value = "user", required = false, defaultValue = "null") String username, //就相当于username=request.getParameter("user")
            @CookieValue("JSESSIONID") String JID){
     
        System.out.println(username);
        System.out.println(UserAgent);
        System.out.println(JID);
        return "success";
    }

五、SpringMVC自动封装POJO

创建一个表单用来提交book信息

  <form action="addBook" method="post">
    <input type="text" name="bookName"/><br/>
    <input type="text" name="author"/><br/>
    <input type="text" name="price"/><br/>
    <input type="text" name="stock"/><br/>
    <input type="text" name="sales"/><br/>
  form>

SpringMVC自动封装book对象

    @RequestMapping(value = "/addBook")
    public String addBook(Book book){
     
        System.out.println("保存图书:" + book);

        return "success";
    }

关于中文乱码问题可以配置一个字符编码Filter

    
    <filter>
        <filter-name>CharacterEncodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
        
        <init-param>
            <param-name>forceEncodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

CharacterEncodingFilter类源码

通过request.setCharacterEncoding(encoding)设置字符编码方式

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
     
        String encoding = this.getEncoding();
        if (encoding != null) {
     
            if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) {
     
                request.setCharacterEncoding(encoding);
            }

            if (this.isForceResponseEncoding()) {
     
                response.setCharacterEncoding(encoding);
            }
        }

        filterChain.doFilter(request, response);
    }

要注意的是字符编码Filter一定要在其它Filter之前配置,因为一定要在第一次获取请求参数之前配置字符编码才会有效

输出结果:
在这里插入图片描述

六、请求参数传入原生API

SpringMVC也可以直接在参数上写原生API,比如HttpServletRequestHttpSession

只可以接受这几个原生API

1)HttpServletRequest
2)HttpServletResponse
3)HttpSession
4)java.security.Principal
5)Locale
6)InputStream
7)OutputStream
8)Reader
9)Writer
    @RequestMapping("/API")
    public String requestAPI(HttpSession session, HttpServletRequest request, HttpServletResponse response){
     
        request.setAttribute("reqParam","请求域中的参数");
        session.setAttribute("sessionParam","session域中的参数");
        ServletInputStream inputStream = request.getInputStream();
        ServletOutputStream outputStream = response.getOutputStream();
        BufferedReader reader = request.getReader();
        PrintWriter writer = response.getWriter();

        return "success";
    }

你可能感兴趣的:(SpringMVC,SpringMVC,请求参数处理)