SpringMVC获取请求参数

通过ServletAPI获取 (很少用)

只需要在控制器方法的形参设置HttpServletRequest类型的形参,
就可以在控制器方法中使用request对象获取请求参数。

controller控制层

@RequestMapping("/param/servletAPI")
    public String getParmByServletAPI(HttpServletRequest request){
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    System.out.println("username:"+username+"passworld:"+password);
    return  "success";
    }

thymeleaf渲染页面

用户名: 密码:

跳转成功

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

只需要在控制器方法的形参位置,设置一个形参,

形参的名字和请求参数的名字 (表单name属性值等于value属性值) 一致即可。

controller控制层

    @RequestMapping("/param")
    public String getParam(String username,String password){
        System.out.println("username:"+username+"passworld:"+password);
        return "success";
    }

特殊情况 形参和请求参数名字不同

RequestParam

@RequestParam:将请求参数和控制器方法的形参绑定
@RequestParam注解的三个属性:①value,②required,defaultvalue
①value:设置和形参绑定的请求参数的名字
②required:设置是否必须传输value所对应的请求参数,
默认值为true表示value所对应的请求参数必须传输,否则页面报错,
若为false,表示value所对应请求参数不是必须传输,
若为传输,则形参值为null。
③defaultValue:设置当没有传输value所对的请求参数时,为形参设置的默认值,
此时和required属性值无关。

controller控制层

@RequestMapping("/param")
public String getParam(
                    @RequestParam(value = "userName",required = true,defaultValue ="hello")
       String username, String password){
           System.out.println("username:"+username+"passworld:"+password);
                       return "success";
}

@RequestHeader

@RequestHeader:将请求头信息和控制器方法的形参绑定

@RequestHeader注解一共有三个属性:value、required、defaultValue,

用法同@RequestParam。

@CookieValue

@CookieValue:将cookie数据和控制器方法的形参绑定

@CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

@RequestMapping("/param/servletAPI")
//当这个请求处理完成后,就会在响应报文里往浏览器响应JSESSIONID,从此之后每次发送请求都会携带cookie
    public String getParmByServletAPI(HttpServletRequest request){
//    获取session对象,请求报文中就有cookie数据了
    HttpSession session = request.getSession();
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    System.out.println("username:"+username+"passworld:"+password);
    return  "success";
    }

@RequestMapping("/param")
//cookievalue注解的value值是获取数据cookie数据cookie的键
public String getParam(@CookieValue("JSESSIONID") String jsessionid){
    System.out.println("jsessionid:"+jsessionid);
//jsessionid:7B77E41C08EE94041881552DA35AA4C6
    return "success";
}

通过POJO获取请求参数

通过控制器方法的实体类型的形参获取请求参数

需要控制器方法的形参位置设置实体类类型的形参,
要保证实体类中的属性的属性名和请求参数的名字一致,
就可以直接把当前请求参数值封装到实体类类型的形参

实体类

public class User {
    private Integer id;
    private String username;
    private String password;
    public User() {
    }
   ....
}

controller控制层

@RequestMapping("/param/pojo")
    public String getParamByPojo(User user){
        System.out.println(user);
 //输出为:User{id=null, username='...', password='...'}
    return "success";
    }

thymeleaf渲染页面

用户名: 密码:

解决获取请求参数的乱码问题

不能用底层javaweb的API解决乱码问题,

因为在springmvc中请求对象是DispatcherServlet给的,所以在DispatcherServlet已经 获取了请求参数,已经不能设置编码问题,设置编码之前,一定不能获取任何请求参数。

web.xml


  
    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    

    
      forceEncoding
      true
    
  
  
    CharacterEncodingFilter
    /*
  

你可能感兴趣的:(java,mvc)