【Spring】基础入门篇(十六) SpringMVC常用注解

Spring·基础入门篇(十六) SpringMVC常用注解


1. RequestParam

1.1 使用说明

作用:

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

属性:

  • value:请求参数中的名称
  • required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错

1.2 使用示例

jsp:


控制器:


1. RequestParam

1.1 使用说明

作用:

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

属性:

  • value:请求参数中的名称
  • required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错

1.2 使用示例

jsp:

<!-- requestParams 注解的使用 -->
<a href="useRequestParam?name=test">requestParam 注解</a>

控制器:

@RequestMapping("/useRequestParam")
public String useRequestParam(@RequestParam("name")String username, @RequestParam(value="age", required=false)Integer age){
	System.out.println(username + ", " + age);
	return "success";
}

运行结果:
在这里插入图片描述

2. RequestBody

2.1 使用说明

作用:

  • 用于获取请求体内容。直接使用得到是key=value&key=value…结构的数据。
  • get 请求方式不适用。

属性:

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

2.2 使用示例

post 请求 jsp:

<!-- request body 注解 -->
<form action="springmvc/useRequestBody" method="post">
    用户名称:<input type="text" name="username" ><br/>
    用户密码:<input type="password" name="password" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>

get 请求 jsp:

<a href="springmvc/useRequestBody?body=test">requestBody 注解 get 请求</a>

控制器:

@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required = false) String body) {
    System.out.println(body);
    return "success";
}

post请求运行结果:
在这里插入图片描述
get请求运行结果:
在这里插入图片描述

3. PathVaribale

3.1 使用说明

作用:

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

属性:

  • value:用于指定 url 中占位符名称。
  • required:是否必须提供占位符。

3.2 使用示例

jsp:

<!-- PathVariable 注解 -->
<a href="usePathVariable/100">pathVariable 注解</a>

控制器:

@RequestMapping("/usePathVariable/{id}")
public String usePathVariable(@PathVariable("id") Integer id) {
    System.out.println(id);
    return "success";
}

运行结果:
在这里插入图片描述

3.3 REST 风格 URL

什么是rest:

  • REST(英文:Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。
  • 在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,REST 都倾向于用更加简单轻量的方法设计和实现。值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格。它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口。

restful 的优点:

  • 它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

restful 的特性:

  • 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息
  • 表现层(Representation):把资源具体呈现出来的形式
  • 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程

HTTP 协议里面,四个表示操作方式的动词:

  • GET 用来获取资源
  • POST 用来新建资源
  • PUT 用来更新资源
  • DELETE 用来删除资源

restful 的示例:

  • /account/1 HTTP GET : 得到 id = 1 的 account
  • /account/1 HTTP DELETE: 删除 id = 1 的 account
  • /account/1 HTTP PUT: 更新 id = 1 的 account
  • /account HTTP POST: 新增 account

4. RequestHeader

4.1 使用说明

作用:

  • 用于获取请求消息头

属性:

  • value:提供消息头名称
  • required:是否必须有此消息头

4.2 使用示例

jsp:

<!-- RequestHeader 注解 -->
<a href="useRequestHeader">获取请求消息头</a>

控制器:

@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value = "Accept-Language",
        required = false) String requestHeader) {
    System.out.println(requestHeader);
    return "success";
}

运行结果:
在这里插入图片描述

5. CookieValue

5.1 使用说明

作用:

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

属性:

  • value:指定 cookie 的名称
  • required:是否必须有此 cookie

5.2 使用示例

jsp:

<!-- CookieValue 注解 -->
<a href="useCookieValue">绑定 cookie 的值</a>

控制器:

@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value = "JSESSIONID", required = false) String cookieValue) {
    System.out.println(cookieValue);
    return "success";
}

运行结果:
在这里插入图片描述

6. ModelAttribute

6.1 使用说明

作用:

  • 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数
  • 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法
  • 出现在参数上,获取指定的数据给参数赋值

属性:

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

应用场景:

  • 当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据

6.2 使用示例

修饰的方法没有返回值

作用在方法,先执行
jsp:

<!-- ModelAttribute 注解的基本使用 -->
<a href="testModelAttribute?username=test">测试 modelattribute</a>

控制器:

@ModelAttribute
public void showModel(User user) {
    System.out.println("执行了 showModel 方法" + user.getUsername());
}

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
    System.out.println("执行了控制器的方法" + user.getUsername());
    return "success";
}

运行结果:
在这里插入图片描述

修饰方法带返回值

修改用户信息,要求用户的密码不能修改
jsp:

<form action="updateUser" method="post">
    用户名称:<input type="text" name="username" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>

控制器:

@ModelAttribute
public User showModel(String username) {
    //模拟去数据库查询
    User abc = findUserByName(username);
    System.out.println("执行了 showModel 方法"+abc);
    return abc;
}
@RequestMapping("/updateUser")
public String testModelAttribute(User user) {
    System.out.println("控制器中处理请求的方法:修改用户:"+user);
    return "success";
}
private User findUserByName(String username) {
    User user = new User();
    user.setUsername(username);
    user.setAge(19);
    user.setPassword("123456");
    return user;
}

运行结果:
在这里插入图片描述

7. SessionAttribute

7.1 使用说明

作用:

  • 用于多次执行控制器方法间的参数共享

属性:

  • value:用于指定存入的属性名称
  • required:用于指定存入的数据类型

7.2 使用示例

jsp:

<!-- SessionAttribute 注解的使用 -->
<a href="save">存入 SessionAttribute</a>
<a href="find">取出 SessionAttribute</a>
<a href="delete">清除 SessionAttribute</a>

控制器:

@Controller
@SessionAttributes(value = {"username", "password", "age"}, types = {String.class, Integer.class}) // 把数据存入到session域对象中
public class SessionController {
    /**
     * 向session中存入值
     *
     * @return
     */
    @RequestMapping(path = "/save")
    public String save(Model model) {
        System.out.println("向session域中保存数据");
        model.addAttribute("username", "root");
        model.addAttribute("password", "123");
        model.addAttribute("age", 20);
        return "success";
    }
    /**
     * 从session中获取值
     * @return
     */
    @RequestMapping(path = "/find")
    public String find(ModelMap modelMap) {
        String username = (String) modelMap.get("username");
        String password = (String) modelMap.get("password");
        Integer age = (Integer) modelMap.get("age");
        System.out.println(username + " : " + password + " : " + age);
        return "success";
    }
    /**
     * 清除值
     * @return
     */
    @RequestMapping(path = "/delete")
    public String delete(SessionStatus status) {
        status.setComplete();
        return "success";
    }
}

运行结果:
在这里插入图片描述

1. RequestParam

1.1 使用说明

作用:

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

属性:

  • value:请求参数中的名称
  • required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错

1.2 使用示例

jsp:


控制器:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值