package com.atguigu.Controller;
import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.*;
import java.io.UnsupportedEncodingException;
/*
获取请求参数的方式:
1.通过ServletAPI获取
只需要在控制器方法的形参位置设置HttpServletRequest类型的形参,
就可以在控制器方法中使用request对象获取请求参数
2.通过控制器方法的形参获取
只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字需要一致
3.@RequestParam:将请求参数和控制器方法的形参绑定
@RequestParam注解的三个属性:value,required,defaultvalue
value:设置和形参绑定的请求参数的名字
required:设置是否必须传输value所对应的请求参数,
默认值为true,表示value所对应的请求参数必须传输,否则页面报错:
400 - Required String parameter 'xxx' is not present
若设置false,则表示value所对应的请求参数不是必须传输,若不传输,则形参值为null
defaultvalue:设置没有传输value所对应的请求参数时,为形参设置的默认值,此时和required属性值无关
4.@RequestHeader:将请求头信息和控制器方法的形参绑定
5.@CookieValue:将Cookie数据和控制器方法的形参绑定
6.通过控制器方法的实体类类型的形参获取请求参数
需要在控制器方法的形参位置设置实体类类型的形参,要保证实体类中的属性名和请求参数的名字一致
可以通过实体类的类型的形参获取请求参数
*/
@Controller
public class TestParmContriller{
// 1.第一种获取浏览器参数方法
@RequestMapping("/param/servletAPI")
public String getParamByServletAPI(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
String username = httpServletRequest.getParameter("username");
String password = httpServletRequest.getParameter("password");
System.out.println("username="+username+",password="+password);
HttpSession session = httpServletRequest.getSession();
return "success";
}
// 2.第二种获取浏览器参数方法
//@RequestMapping("/param")
// public String getParam(HttpServletRequest request, String username, Integer password) throws UnsupportedEncodingException {
// request.setCharacterEncoding("UTF-8");
// System.out.println("username="+username+",password="+password);
// return "success";
//}
//
//3.第三种获取浏览器参数方法
@RequestMapping("/param")
public String getParam( @RequestParam(value = "userName",required = true,defaultValue = "root") String username,
Integer password
,@RequestHeader("referer") String referer
,@CookieValue("JSESSIONID") String jsessionId
) {
System.out.println("jsessionId="+jsessionId);
System.out.println("referer="+referer);
System.out.println("username="+username+",password="+password);
return "success";
}
//4.
@RequestMapping("/param/pojo")
public String getParamByPojo(User user){
System.out.println("User="+user);
return "success";
}
}
/*
获取请求参数的方式:
1.通过ServletAPI获取
只需要在控制器方法的形参位置设置HttpServletRequest类型的形参,
就可以在控制器方法中使用request对象获取请求参数
2.通过控制器方法的形参获取
只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字需要一致
3.@RequestParam:将请求参数和控制器方法的形参绑定
@RequestParam注解的三个属性:value,required,defaultvalue
value:设置和形参绑定的请求参数的名字
required:设置是否必须传输value所对应的请求参数,
默认值为true,表示value所对应的请求参数必须传输,否则页面报错:
400 - Required String parameter 'xxx' is not present
若设置false,则表示value所对应的请求参数不是必须传输,若不传输,则形参值为null
defaultvalue:设置没有传输value所对应的请求参数时,为形参设置的默认值,此时和required属性值无关
4.@RequestHeader:将请求头信息和控制器方法的形参绑定,其中的属性与@RequestParam注解的三个属性使用方法一样。
5.@CookieValue:将Cookie数据和控制器方法的形参绑定,其中的属性与@RequestParam注解的三个属性使用方法一样。
6.通过控制器方法的实体类类型的形参获取请求参数
需要在控制器方法的形参位置设置实体类类型的形参,要保证实体类中的属性名和请求参数的名字一致
可以通过实体类的类型的形参获取请求参数
*/