Spring学习笔记(七)——SpringMVC常用的注解
2023-06-13 09:11:03 时间
常用的注解
1. RequestParam注解
1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
2. 属性
1. value:请求参数中的名称
2. required:请求参数中是否必须提供此参数,默认值是true
3. 代码如下
/**
* 测试RequestParam注解,默认必须传参数,可以使用required=false配置可以不传参
* 参数的名字必须为value的值
* @param name
* @return
*/
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="username",required=false)String name) {
System.out.println("执行了。。。");
System.out.println(name);
return "success";
}
}
2. RequestBody注解
1. 作用:用于获取请求体的内容(注意:get方法不可以)
2. 属性
1. required:是否必须有请求体,默认值是true
3. 代码如下
/**
* 获取请求体的内容
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("执行了。。。");
System.out.println(body); //username=admin&password=123456&money=6666
return "success";
}
- PathVariable注解
- 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性
- value:指定url中的占位符名称
- Restful风格的URL
- 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
- restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
- 代码如下
/**
* 获取请求体的内容
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(value = "id") String id) {
System.out.println("执行了。。。");
System.out.println(id);
return "success";
}
4. RequestHeader注解
1. 作用:获取指定请求头的值
2. 属性
1. value:请求头的名称
3. 代码如下
/**
* 获取请求头的值
* @param header
* @return
*/
@RequestMapping("/testRequestHeader")
public String sayHello(@RequestHeader(value="Accept") String header) {
System.out.println("执行了。。。");
System.out.println(header);
return "success";
}
5. CookieValue注解
1. 作用:用于获取指定cookie的名称的值
2. 属性
1. value:cookie的名称
3. 代码
/**
* 测试注解testCookieValue
* @param cookieValue
* @return
*/
@RequestMapping("/testCookieValue")
public String CookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println("执行了。。。");
System.out.println(cookieValue);
return "success";
}
6. ModelAttribute注解
1. 作用
1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
2. 出现在参数上:获取指定的数据给参数赋值。
2. 应用场景
1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
3. 具体的代码
* 修饰的方法有返回值
/**
* 测试ModelAttribute注解
* 后执行
* @param
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("testModelAttribute执行了。。。");
System.out.println(user);
return "success";
}
/*
* 该方法先执行
* 然后再执行后执行的方法
*/
@ModelAttribute
public User sayHello(String username){
System.out.println("sayHello执行了。。。");
User user = new User();
user.setUname(username);
user.setAge(666);
return user;
}
- 修饰的方法没有返回值
/**
* 测试ModelAttribute注解
* 后执行
* @param
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc") User user) {
System.out.println("testModelAttribute执行了。。。");
System.out.println(user);
return "success";
}
/*
* 该方法先执行
* 然后再执行后执行的方法
*/
@ModelAttribute
public void sayHello(String username, Map<String, User> map){
System.out.println("sayHello执行了。。。");
User user = new User();
user.setUname(username);
user.setAge(666);
map.put("abc", user);
// return user;
}
7. SessionAttributes注解
1. 作用:用于多次执行控制器方法间的参数共享
2. 属性
1. value:指定存入属性的名称
3. 代码如下
/**
* 测试注解SessionAttributes
* @param
* @return
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes执行了。。。");
model.addAttribute("msg","model存的session");
return "success";
}
/**
* 测试注解SessionAttributes
* 从session域中获取值
* @param
* @return
*/
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
System.out.println("getSessionAttributes。。。");
String msg = (String)modelMap.get("msg");
System.out.println(msg);
return "success";
}
/**
* 测试注解SessionAttributes
* 清除session域中获取值
* @param
* @return
*/
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status) {
System.out.println("delSessionAttributes执行了。。。");
status.setComplete();
return "success";
}
总测试代码
- AnnoController.java
package cn.kt.controller;/*
*Created by tao on 2020-04-09.
*/
import cn.kt.domian.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import java.util.Map;
@Controller
@SessionAttributes(value = {"msg"}) //把msg存入到了session域中
@RequestMapping("/anno")
public class AnnoController {
/**
* 测试RequestParam注解,默认必须传参数,可以使用required=false配置可以不传参
* 参数的名字必须为value的值
*
* @param name
* @return
*/
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value = "username", required = false) String name) {
System.out.println("执行了。。。");
System.out.println(name);
return "success";
}
/**
* 获取请求体的内容
*
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("执行了。。。");
System.out.println(body); //username=admin&password=123456&money=6666
return "success";
}
/**
* 获取请求体的内容
*
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(value = "id") String id) {
System.out.println("执行了。。。");
System.out.println(id);
return "success";
}
/**
* 获取请求头的值
*
* @param header
* @return
*/
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println("执行了。。。");
System.out.println(header);
return "success";
}
/**
* 测试注解testCookieValue
* @param cookieValue
* @return
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println("执行了。。。");
System.out.println(cookieValue);
return "success";
}
/**
* 测试ModelAttribute注解
* 后执行
* @param
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value="abc") User user) {
System.out.println("testModelAttribute执行了。。。");
System.out.println(user);
return "success";
}
/*
* 该方法先执行
* 然后再执行后执行的方法
*/
@ModelAttribute
public void sayHello(String username, Map<String, User> map){
System.out.println("sayHello执行了。。。");
User user = new User();
user.setUname(username);
user.setAge(666);
map.put("abc", user);
// return user;
}
/**
* 测试注解SessionAttributes
* @param
* @return
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("testSessionAttributes执行了。。。");
model.addAttribute("msg","model存的session");
return "success";
}
/**
* 测试注解SessionAttributes
* 从session域中获取值
* @param
* @return
*/
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
System.out.println("getSessionAttributes。。。");
String msg = (String)modelMap.get("msg");
System.out.println(msg);
return "success";
}
/**
* 测试注解SessionAttributes
* 清除session域中获取值
* @param
* @return
*/
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status) {
System.out.println("delSessionAttributes执行了。。。");
status.setComplete();
return "success";
}
}
- anno.jsp
<%--
Created by IntelliJ IDEA.
User: tao
Date: 2020-04-09
Time: 0:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>常用注解</h4>
<a href="/anno/testRequestParam" rel="nofollow noopener" >testRequestParam</a><br>
<form action="/anno/testRequestBody" method="post">
姓名:<input type="text" name="username"></br>
密码:<input type="password" name="password"> <br>
金额:<input type="text" name="money"></br>
<input type="submit" value="提交">
</form>
<br>
<a href="/anno/testPathVariable/10" rel="nofollow noopener" >testPathVariable(restful风格)</a><br>
<a href="/anno/testRequestHeader" rel="nofollow noopener" >testRequestHeader测试</a><br>
<a href="/anno/testCookieValue" rel="nofollow noopener" >CookieValue测试</a><br>
<form action="/anno/testModelAttribute" method="post">
姓名:<input type="text" name="username"></br>
<input type="submit" value="提交">
</form>
<a href="/anno/testSessionAttributes" rel="nofollow noopener" >SessionAttributes注解测试</a><br>
<a href="/anno/getSessionAttributes" rel="nofollow noopener" >SgetSessionAttributes注解测试</a><br>
<a href="/anno/delSessionAttributes" rel="nofollow noopener" >delSessionAttributes注解测试</a><br>
</body>
</html>
- User.java
package cn.kt.domian;/*
*Created by tao on 2020-04-08.
*/
public class User {
private String uname;
private int age;
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age=" + age +
'}';
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
相关文章
- Spring学习笔记(十八)——spring日志框架的配置和使用
- 简单介绍一下spring bean的生命周期_Spring bean的生命周期
- SpringMVC工作原理及其流程
- Spring和SpringMVC以及SpringBoot的区别
- Spring MVC框架:第一章:SpringMVC概述及初步体会SpringMVC使用过程
- spring boot整合shiro_Spring框架介绍及使用
- SpringMvc启动源码解析
- ajax长轮询 spring mvc,springmvc ajax 长轮询
- spring springMVC mybatis_javaweb servlet
- Spring监听器-spring源码详解(五)
- 【经验】SpringMVC配置映射非WebRoot目录文件位置的静态资源访问
- SpringMVC详解(五)——参数绑定编程语言
- @Component-@Resource-@Repository-@Service-@Controller的区别和理解——-springMVC详解编程语言
- Spring Boot2.0之注解方式启动Springmvc详解编程语言
- Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例详解编程语言
- SSM框架整合( Spring 、 SpringMVC 和 Mybatis )详解编程语言
- SpringMVC——Model和转发重定向详解编程语言
- Maven搭建SSM(SpringMVC+Spring+MyBatis)框架入门教程(超级详细)
- Spring框架下整合Redis的实现(spring整合redis)
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase