SpringMVC-获取参数


目录
  • 环境
  • 通过ServletAPI获取
  • 通过控制器方法的形参获取请求参数
    • @RequestParam
    • @RequestHeader
    • @CookieValue
    • 通过POJO获取请求参数
    • 解决乱码

环境

IDE:idea 2020.3
构建工具:maven-3.8.1
服务器:tomcat9
Spring版本:5.3.1


    
    
        org.springframework
        spring-webmvc
        5.3.1
    

    
    
        ch.qos.logback
        logback-classic
        1.2.3
    

    
    
        javax.servlet
        javax.servlet-api
        3.1.0
        provided
    

    
    
        org.thymeleaf
        thymeleaf-spring5
        3.0.12.RELEASE
    

<?xml version="1.0" encoding="UTF-8"?>



    
    

    
    
        
        
        
            
                
                     
                    
                    
                    
                    
                    
                    
                    
                 
            
        
    



    
        springMVC
        org.springframework.web.servlet.DispatcherServlet
        
            
            contextConfigLocation
            classpath:springMVC.xml
        
        1
    
    
    
        springMVC
        /
    

通过ServletAPI获取




  
  首页



用户名:



  
  hello



hello

  /**
   *HelloController
   */

  @RequestMapping("/")
  public String index() {
    return "index";
  }
  
  @RequestMapping("/testParam")
  public String testParam(HttpServletRequest request) {
    String userName = request.getParameter("userName");
    System.out.println("userName = " + userName);
    return "hello";
  }


通过控制器方法的形参获取请求参数

在控制器方法中设置与请求参数名一样的形参,DispatcherServlet就会将请求参数赋值给相应的形参


如果请求参数中有多个同名的参数,可以设置一个数组来接收

@RequestParam


@RequestParam将请求参数和控制器方法的形参进行绑定,有三个属性:
1:value:指定为形参赋值的请求参数的参数名
2:required:设置是否必须传输此请求参数,默认值为true
3:defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

@RequestHeader


@RequestHeader是将请求头信息和控制器方法的形参创建映射关系,用法同@RequestParam

@CookieValue


@CookieValue是将cookie数据和控制器方法的形参创建映射关系,用法同@RequestParam

通过POJO获取请求参数

可以在控制器方法中设置一个实体类类型的形参,如果请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

package com.fly.entity;

/**
 * @author 26414
 */
public class Person {

  private String userName;

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public Person() {
  }

  @Override
  public String toString() {
    return "Person{" +
            "userName='" + userName + '\'' +
            '}';
  }

  public Person(String userName) {
    this.userName = userName;
  }
}

解决乱码

在web.xml中注册编码过滤器CharacterEncodingFilte

通过源码可以得出过滤器


        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceResponseEncoding
            true
        
    
    
        CharacterEncodingFilter
        /*