文章目录
- 常用注解
- 1.RequestMapping注解:建立请求URL和处理方法之间的对应关系
- 2.RequestParam注解:把请求中的指定名称的参数传递给控制器中的形参赋值
- 3.RequestBody注解:获取请求体的内容,参数拼接成一个字符串
- ResponseBody:返回Json数据
- Controller:返回视图View
- 4.PathVariable注解:绑定url中的占位符
- 5.RequestHeader注解:获取指定请求头的值
- 6.CookieValue注解:获取指定cookie的名称的值
- 7.SessionAttributes注解:用于多次执行控制器方法间的参数共享(全局Session设置)
- ①Model(模型信息)的使用
- ②SessionAttributes注解
- 8.ModelAttribute注解:用于初始化相关属性数据
- ①作用在方法上,初始化相关属性
- ②作用在参数上,初始化相关属性
回顾:SpringMVC快速入门,搭建SpringMVC开发环境
常用注解
1.RequestMapping注解:建立请求URL和处理方法之间的对应关系
回顾:RequestMapping注解详解
2.RequestParam注解:把请求中的指定名称的参数传递给控制器中的形参赋值
@Controller
@RequestMapping(value ="/param")
public class RequestParamController {
/*
属性
value:请求参数中的名称
required:请求参数中是否必须提供此参数。不写默认是true,必须提供该请求参数,否则404
defaultValue:默认值
*/
@RequestMapping(value ="/test")
public String add(@RequestParam(value = "name",required = false,defaultValue = "无名氏") String name,
@RequestParam(value = "age") Integer age){
System.out.println(name+" "+age);
//http://localhost:8080/param/test?name=张三三&age=10 控制台输出: 张三三 10
//http://localhost:8080/param/test?name=张三三 控制台输出: HTTP Status 400 – Bad Request
//http://localhost:8080/param/test?age=18 控制台输出: 无名氏 18
return "login";
}
}
3.RequestBody注解:获取请求体的内容,参数拼接成一个字符串
@Controller
@RequestMapping(value = "/body")
public class RequestBodyController {
/*接收前端传入的参数,并将参数拼接成一个字符串 注意:用于POST请求
属性
required:是否必须有请求体,默认值是true
*/
@RequestMapping(value = "/test")
public String show(@RequestBody String body){
System.out.println(body);
//name=%E5%91%A8%E5%93%88%E5%93%88&age=23&address=%E6%B1%9F%E8%A5%BF
return "login";
}
}
ResponseBody:返回Json数据
将Controller的方法返回的对象,通过转换器转换为指定的格式之后,写入到 Response 对象的 body 区,常用来返回 JSON 数据或 XML 数据 。
@RestController 这个注解,它就包含了 @ResponseBody 这个注解:@RestController=@ResponseBody+@Controller
在类上用@RestController,其内的所有方法都会默认加上@ResponseBody,也就是默认返回JSON格式。
如果某些方法不是返回JSON的,有的方法返回的是json,就只能在类上用@Controller返回view,然后在返回json的方法上加@ResponseBody。
Controller:返回视图View
@Controller是最基本的控制层注解,继承了Spring的@Component注解,会把对应的类声明为Spring对应的Bean,并且可以被Web组件管理。使用@Controller注解返回的是view,而不是Json数据。
4.PathVariable注解:绑定url中的占位符
@Controller
@RequestMapping(value = "/pathVariable")
public class PathVariableController2 {
/*@PathVariable:提供对RestFul风格的支持
Restful风格的URL:请求路径一样,可以根据不同的请求方式去执行后台的不同方法
可以通过 GET、 POST、 PUT、 PATCH、 DELETE 等方式对服务端的资源进行操作。其中,GET 用于查询资源,POST 用于创建资源,
PUT 用于更新服务端的资源的全部信息,PATCH 用于更新服务端的资源的部分信息,DELETE 用于删除服务端的资源。
根据ID删除
请求: http://localhost:8080/pathVariable/1
http://localhost:8080/pathVariable/2
......
...
*/
@RequestMapping(value = {"/{id}"},method = RequestMethod.DELETE)
public String delete(@PathVariable(value = "id")Integer id){
System.out.println("删除服务端的资源 id为"+id);
return "login";
}
//根据ID查询
@RequestMapping(value = {"/{id}"},method = RequestMethod.GET)
public String getById(@PathVariable(value = "id")Integer id){
System.out.println("查询资源 id为"+id);
return "login";
}
}
使用HTTP Client工具测试体现:请求路径一样,可以根据不同的请求方式执行后台的不同方法
DELETE 方式,执行delete方法
GET方式,执行getById方法
5.RequestHeader注解:获取指定请求头的值
/*
属性
value:请求头的名称
required:请求参数中是否必须提供此请求头。不写默认是true,必须提供有该请求头。
defaultValue:默认值
*/
@Controller
@RequestMapping(value ="/header")
public class RequestHeaderController {
@RequestMapping(path="/test")
public String show(@RequestHeader(value="Host",required = true,defaultValue = "没有值") String header) {
System.out.println(header);
//请求 http://localhost:8080/header/test 控制台输出 localhost:8080
return "login";
}
}
6.CookieValue注解:获取指定cookie的名称的值
@Controller
@RequestMapping(value = "/cookie")
public class CookieValueController {
/*
属性
·value:cookie的名称
required:请求参数中是否必须提供此cookie的名称。不写默认是true,必须提供有该cookie的名称。
defaultValue:默认值
*/
@RequestMapping(value = "/test")
public String show(@CookieValue(value = "JSESSIONID",required = false,defaultValue = "JSESSIONID没有值")String jsid){
System.out.println(jsid);
//6598974983EC4013BFC5375337B6EBFC
return "login";
}
}
7.SessionAttributes注解:用于多次执行控制器方法间的参数共享(全局Session设置)
①Model(模型信息)的使用
- 作用:SpringMVC会把Model(模型信息)中的的数据放入到request域对象中,页面可以通过EL表达式来取request域中的数据。
- 示例:后台使用Model的addAttribute方法,页面使用EL表达式取数据。
后台
@Controller
@RequestMapping(value = "/model")
public class ModelController {
/* SpringMVC会把Model(模型信息)中的的数据放入到request域对象中
后台使用Model的addAttribute方法添加信息
前台页面使用EL表达式可取数据
*/
@RequestMapping(value = "/test")
public String getUser(Model model){
//添加name信息,SpringMVC会把name存储到HttpServletRequest作用域中
model.addAttribute("name","周哈哈");
return "login";
}
}
前台 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>你已入门啦</h3>
<div>
${name}
</div>
</body>
</html>
②SessionAttributes注解
@Controller
@RequestMapping(value = "/session")
/*@SessionAttributes:把数据存入到session域对象中
value = "name":表示将Request域中的name值获取并存入到Session中
types:将request中指定的数据类型存入到Session中
*/
@SessionAttributes(value= {"username","password","age"},types= {Integer.class})
public class SessionAttributesController {
//添加Session(向session中存入值)
@RequestMapping(path="/save")
public String save(Model model) {
System.out.println("把数据存入到session域对象中");
model.addAttribute("username", "root");
model.addAttribute("password", "666");
model.addAttribute("age", 18);
return "test";
}
//后台查询Session(从session中获取值)
@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 "test";
}
//删除session
@RequestMapping(path="/delete")
public String delete(SessionStatus status) {
status.setComplete();
System.out.println("已删除session");
return "test";
}
}
分别依次访问:
http://localhost:8080/session/save
http://localhost:8080/session/find
http://localhost:8080/session/delete
控制台输出:
8.ModelAttribute注解:用于初始化相关属性数据
①作用在方法上,初始化相关属性
@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {
/**
作用在方法上,初始化相关参数(优先执行)
如下,先给user的level属性赋值,再返回到add方法的入参,绑定所提交表单的值。
*/
@ModelAttribute
public User initUser(){
System.out.println("ModelAttribute方法执行 初始化用户Level");
User user = new User();
user.setLevel(1);
return user;
}
/*
增加用户 http://localhost:8080/modelattribute/add?name=张三三
此时的user的Level已经被赋值为1了
*/
@RequestMapping(value = "/add")
public String add(User user){
System.out.println("add方法执行");
System.out.println(user);
return "login";
}
}
User
public class User {
private String name;
//等级
private Integer level;
.....
...
}
访问: http://localhost:8080/modelattribute/add?name=张三三
控制台输出:Level已被初始化为1
②作用在参数上,初始化相关属性
@Controller
@RequestMapping(value = "/modelattribute")
public class ModelAttributeController {
//初始化数据
@ModelAttribute
public void initUserInfo(Map<String,User> map){
System.out.println("ModelAttribute方法执行 初始化用户Level");
User user = new User();
user.setLevel(10);
map.put("user",user);
}
// @ModelAttribute:作用在参数上 http://localhost:8080/modelattribute/param/add?name=张三三
@RequestMapping(value = "/param/add")
public String addUser(@ModelAttribute("user")User user){
System.out.println("addUser方法执行");
System.out.println(user);
return "login";
}
}
访问: http://localhost:8080/modelattribute/add?name=张三三
控制台输出:Level已被初始化为10
更多推荐
Spring与SpringBoot常用注解
发布评论