SpringMVC之常用注解

一  RequestParam注解

1. RequestParam注解的使用场景

如果请求中带有请求参数,那么我们可以使用请求参数绑定的方法获取请求中的参数值。

但是使用请求参数绑定的方法必须要保证请求参数的参数名和处理请求的方法的形参名保持一致。

如果不一致的话,就无法获取参数值。这种情况下就可以使用RequestParam注解解决这个问题。

2. RequestParam注解的作用

把请求中指定名称的参数给控制器中的形参赋值。

3. RequestParam注解的源码

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Map;
import org.springframework.core.annotation.AliasFor;

@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 ValueConstants.DEFAULT_NONE;

}

4. RequestParam注解的参数介绍

1)value属性

是name属性的别名,注意:如果只有value属性,那么value=可以省略不写

2)name属性

The name of the request parameter to bind to. 也就是要绑定的请求参数的参数名。

3)required属性

这个参数是不是必须的。如果该属性的属性值为true,那么请求中就必须有这个参数;如果属性值为false,那么请求中有没有这个参数都可以。默认值为true。

二 RequestBody注解

1. RequestBody注解的作用

用于获取请求体内容。直接使用得到是 key=value&key=value...结构的数据。
get 请求方式不适用,因为get方式没有请求体。

2. RequestBody注解的属性

required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false,get 请求得到是 null。

三 PathVaribale注解

1. PathVaribale注解的作用

用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。
url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。

2. PathVaribale注解的属性

  • value:是name属性的别名,用于指定 url 中占位符名称。如果只有value属性,则value=可以省略
  • name:用于指定 url 中占位符名称。
  • required:是否必须提供占位符。

四 RequestHeader注解(不常用)

1. RequestHeader注解的作用

用于获取请求消息头。

2. RequestHeader注解的属性

  • value:name属性的别名,提供消息头名称
  • name:提供消息头名称
  • required:是否必须有此消息头

五 CookieValue注解

1. CookieValue注解的作用

用于把指定 cookie 名称的值传入控制器方法参数。

2. CookieValue注解的属性

  • value:name属性的别名,指定 cookie 的名称。
  • name:指定cookie的名称。
  • required:是否必须有此 cookie。

前五种注解的案例代码

1. anno.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--测试RequestParam注解--%>
    <a href="anno/requestParam?uname=zhangsan&pword=123">测试RequestParam注解</a></br>

    <%--测试RequestBody注解--%>
    <form action="anno/requestBody" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="text" name="password"><br>
        提交:<input type="submit" value="提交"><br>
    </form>

    <%--测试PathVaribale注解--%>
    <a href="anno/pathVaribale/10" >测试PathVaribale注解</a><br>

    <%--测试RequestHeader注解--%>
    <a href="anno/requestHeader">测试RequestHeader注解</a><br>

    <%--测试CookieValue注解--%>
    <a href="anno/cookieValue">测试CookieValue注解</a><br>

</body>
</html>

2. AnnoController

package cn.itcast.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("anno")
public class AnnoController {
    /**
     * 测试RequestParam注解
     */
    @RequestMapping("/requestParam")
    public String testRequestParam(@RequestParam(name="uname",required = true) String username,@RequestParam(name="pword",required = false) String password){
        System.out.println(username);
        System.out.println(password);
        return "success";
    }

    /**
     * 测试RequestBody
     * @param body
     * @return
     */
    @RequestMapping("requestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }

    /**
     * 测试PathVaribale
     * @param id
     * @return
     */
    @RequestMapping("/pathVaribale/{sid}")
    public String testPathVaribale(@PathVariable(name="sid") String id){
        System.out.println(id);
        return "success";
    }

    /**
     * 测试RequestHeader
     * @param header
     * @return
     */
    @RequestMapping("/requestHeader")
    public String testRequestHeader(@RequestHeader("Accept") String header){
        System.out.println(header);
        return "success";
    }

    /**
     * 测试CookieValue
     * @param cookieVal
     * @return
     */
    @RequestMapping("/cookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String cookieVal){
        System.out.println(cookieVal);
        return "success";
    }
}

六  ModelAttribute注解

参考ModelAttribute注解的使用总结

1.  ModelAttribute注解的作用

将数据添加到模型对象中,用于视图页面展示时使用。

它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。

2. ModelAttribute注解的属性

value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。

七 SessionAttribute注解

参考SessionAttributes注解介绍

1. SessionAttribute注解的作用

用于多次执行控制器方法间的参数共享。在Session范围内共享数据。

2. SessionAttribute注解的属性

  • value:是name属性的别名,用于指定存入的属性名称
  • name:用于指定存入的属性名称
  • type:用于指定存入的数据类型

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值