目录
一、@RequestParam
@RequestParam可以在控制器方法中获取请求参数,位置放在方法参数前就行。
属性:
name:指定参数的名称
defaultValue:为参数设置默认值
required:设置是否是必须要传入的参数
@RequestMapping("/c2/h7") public String t7(@RequestParam(name = "username",defaultValue = "uiuiui",required = false)String name){ System.out.println("name="+name); return "test"; }
请求路径:(所以这个注解的作用也可以理解成起别名)
二、@RequestHeader,@CookieValue
@RequestHeader:
(1)作用
在控制器方法中获取请求头数据
(2)位置
方法参数前
@CookieValue
(1)作用
在控制器方法中获取Cookie数据
(2)位置
方法参数前
/* 获取User-Agent请求头 获取JSESSIONID的Cookie值 */ @RequestMapping("/annotation3") public String annotation3(@RequestHeader("User-Agent") String userAgent, @CookieValue("JSESSIONID") String jSessionId){ System.out.println(userAgent); System.out.println(jSessionId); return "baizhan"; }
三、@ModelAttribute
(1)作用1
设置指定方法在控制器其他方法前执行
@Controller @RequestMapping("/c5") public class MyController5 { @ModelAttribute public void before(){ System.out.println("前置方法"); } @RequestMapping("/t1") public String t1(){ System.out.println("t1"); return "test"; } }
(2)作用2
从Model模型中获取数据给参数赋值
@Controller @RequestMapping("/c6") public class MyController6 { // 前置方法向Model中设置数据 @ModelAttribute public void before(Model model){ model.addAttribute("name","666"); } // 该参数不是从请求中获取,而是从Model中获取 @RequestMapping("/t1") public String t1(@ModelAttribute("name") String name){ System.out.println(name); return "test"; } }
四、@ResponseBody
作用:方法返回的对象转换为JSON格式,并将JSON数据直接写入到输出流中,使用此注解后不会再经过视图解析器。使用该注解可以处理Ajax请求。
SpringMVC会将Result对象转为JSON格式写入输出流,而SpringMVC默认使用的JSON转换器是jackson,需要在pom中添加jackson依赖。
<!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
五、@RestController
如果一个控制器类下的所有控制器方法都返回JSON格式数据且不进行跳转,可以使用@RestController代替@Controller,此时每个方法上的@ResponseBody都可以省略。
@RestController @RequestMapping("/c8") public class MyController8 { @PostMapping("/addStudent") public Result addStudent(String name, String sex) { // 输出接受到的参数,模拟添加学生 System.out.println(name+":"+sex); // 返回结果 Result result = new Result(true, "添加学生成功!"); return result; } }
六、@RequestBody
作用:将请求中JSON格式的参数转为JAVA对象
@PostMapping("/addStudent2") @ResponseBody public Result addStudent2(@RequestBody Student student) { System.out.println(student); // 返回添加结果 Result result = new Result(true, "添加学生成功!"); return result; }