请求处理---获取请求带来的各种信息

目录

1、@RequestParam 获取请求参数

2、@RequestHeader

3、@CookieValue

4、传入POJO - SpringMVC自动封装

5、传入原生API



1、@RequestParam 获取请求参数

之前是request.getParameter("xxxx")

  1. 变量名和参数名一模一样时,可以不用注解 ,自动赋值(默认方式)
     @RequestMapping(value = "/handle01")
        public String handle01(String username){
            System.out.println(username);
            return "success";
        }
    <a href="${pageContext.request.contextPath}/handle01?username=rocke">handle01:获取请求参数的值</a>

  2. 使用@RequestParam来指定参数

    @RequestMapping(value = "/handle01")
        public String handle01( @RequestParam("username")String name){
            /*相当于 name=request.getParameter(username"")*/
            System.out.println(name);
            return "success";
        }

    如果使用@RequestParam指定参数了,那么这个参数默认必须带,不带会显示400。

我们也可以通过设置它的属性来自定义。@RequestParam有这样几个属性:

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default true;

    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

value:指定要获取的参数的key;

required:指定这个参数是否是必须的,默认true必须;

defaultValue:默认值,没带参数时指定的默认值。

2、@RequestHeader

可以获取请求头中摸个key的值,之前是request.getHeader("xxx")

和RequestParam使用方法一样。

@RequestMapping(value = "/handle01")
    public String handle01( @RequestParam("username")String name,@RequestHeader("User-Agent") String userAgent){
        /*相当于 name=request.getParameter(username"")*/
        System.out.println(name);
        System.out.println("请求头:"+ userAgent);
        return "success";
    }

3、@CookieValue

获取某个cookie的值

以前获取某个cookie的操作:

Cookie[] cookies = request.getCookies

for(Cookie  c : cookies){

   if(c.getName().equals("JSESSIONID")){

           c.getValue();

    }

}

@RequestMapping(value = "/handle01")
    public String handle01(@RequestParam("username")String name,
                           @RequestHeader("User-Agent") String userAgent,
                           @CookieValue("JSESSIONID")String jid){
        /*相当于 name=request.getParameter(username"")*/
        System.out.println(name);
        System.out.println("请求头:"+ userAgent);
        System.out.println("cookie的JSESSIONID是:"+jid);
        return "success";
    }

用法和上边一模一样

4、传入POJO - SpringMVC自动封装

(1)如果我们的请求参数是一个POJO,Springmvc会自动的为POJO进行赋值:将POJO中的每一个属性,从request参数中尝试获取出来,并封装即可。这时要求参数和属性名一致,才可以自动封装赋值。

  • jsp的form表单
<form action="${pageContext.request.contextPath}/student" method="post">
    姓名:<input type="text" name="username"/><br>
    性别:<input type="text" name="sex"/><br>
    年龄:<input type="text" name="age"/><br>
    学校:<input type="text" name="school"/><br>
    <input type="submit">
</form>
  • Student类
public class Student {

    private String username;
    private Integer age;
    private String sex;
    private String school;
    ...............
    .....

}
  • Controller
  @RequestMapping(value = "/student",method = RequestMethod.POST)
    public String addStudent(Student student){
        System.out.println(student);
        return "success";
    }

(2)还可以级联封装

也就是属性的属性也可以自动赋值。

5、传入原生API

可以传入这些原生API:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • java.security.Principal :和https安全协议有关的
  • Locale:国际化有关的的区域信息
  • InputStream:ServletInputStream  inputStream = request.getInputStream()
  • OutputStream:ServletOutputStream outputStream  =  response.getOutputStream()
  • Reader:BufferedReader reader  =  request.getReader()
  • Writer:PrintWriter writer  =  response.getWriter()

这里以HttpServletRequest、HttpSession为例:

 @RequestMapping(value = "/handle03")
    public String handle03(HttpSession session, HttpServletRequest servletRequest){
        servletRequest.setAttribute("reqParam","我是请求域中的");
        session.setAttribute("sessionParam","我是Session域中的");
        return "success";
    }

<body>
<h1>Success</h1>
请求:${requestScope.reqParam}<br>
session:${sessionScope.sessionParam}<br>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_44134725/article/details/112135740