1.时间类型格式化
一般类型的转换只讨论时间日期的格式
在Springboot中用
@InitBinder和@DateTimeFormat
-
这个方法是ssm阶段使用的数据格式绑定,操作较为麻烦,在springboot中一般都是使用@DateTimeFormat来绑定时间日期数据
-
但是@InitBinder可以绑定任何数据,@DateTimeFormat只针对于时间日期数据
区别详解
2.@ControllerAdvice
三种使用场景详解
3.消息头相关的注解
@RequestHeader
这个注解的功能是对原始HttpServletRequest的简化
-
1、value值
对应请求头中的键 -
2、defaultValue 该参数的默认值
当键值没有传输时将使用这个参数进行赋值,前提是required=false -
3、required
是否必须。默认为 true, 表示请求参数中必须包含对应
的参数,若不存在,将抛出异常/** * 了解: 映射请求头信息 用法同 @RequestParam */ @RequestMapping("/testRequestHeader") public String testRequestHeader( @RequestHeader(value = "Accept-Language") String al) { System.out.println("testRequestHeader, Accept-Language: " + al); return SUCCESS; }
@CookieValue
同样的,这个注解也是对原生Servlet处理消息头的简化,让开发者更加关注业务逻辑。例如Cookie中的JSESSIONID的获取如下
4.@ModelAttribute全局请求域增强
- 作用于全局,因此不是很灵活,不是所有的控制器都需要这种增强,使用时需要注意
- 一次请求一个model对象,@ModelAttribute的作用是:每次请求时预先对model进行处理
本质是对一次请求的唯一Model对象进行预处理
- 作用在本控制器上,不影响其他控制器
作用在方法上预先执行
- 当前端发送了请求,如果有@ModelAttribute注解的方法,那么会先执行这个方法,后执行访问的控制层的方法
- 相当于一个全局增强,作用周期是请求域
作用在参数上获取值
方法一:请求域Model对象
注:Model对象的生命周期是一次请求,而不是一次会话
方法二:返回值绑定
同样的也可以通过{}来进行多值绑定
5.Session域增强
- 也是降低开发者对Servlet的API的使用难度
- 两个注解的使用范围是:一次会话(会话域),因此不同请求之间用HttpServletRequest不能共享的数据,一个Model对象只能存活在一次请求域;可以通过@SessionAttribute和@SessionAttributes来实现一次会话的共享
本质是对一次会话的唯一HttpSession对象进行操作
请求域和会话域的区别
-
例如在JSP中,二者的获取方式不同
-
请求域不能获取会话域数据,但会话域可以获取请求域的数据:即model中的数据可以通过@SessionAttributes被httpSession获取
@SessionAttributes绑定
- 因为一次可以绑定多个Model中的数据到HttpSession中,所以 @SessionAttributes是复数
- 标注在类上,表示该类下的所有控制器的model全部传给httpSession
- 绑定的value和type如果有多个,顺序一定要对其,即便是有重复类型
@SessionAttribute使用
@SessionAttribute(value = "m2") Managers m2
的效果相当于httpSession.getAttribute("m2")
,也相当于model.getAttribute("m2")
- 但是删除操作之间互不影响(不是重点)
- 标注在形参之前,表示赋值
代码示例
@RestController
@SessionAttributes(types = {String.class , String.class , Managers.class} , value = {"s1","s2","m1"} )
//@SessionAttributes把model中add的数据注入到httpSession中,也可用@SessionAttribute来获取
public class SessionTest {
@GetMapping("/set")
//1.向请求域model中绑定数据,如果类上有@SessionAttributes则同时绑定至会话域中
public String setSessionAttributes(Model model, HttpSession httpSession){
//1.1前两个都是String类型的
model.addAttribute("s1","测试1");
model.addAttribute("s2","测试2");
//1.2第三个是Managers类的
model.addAttribute("m1",new Managers("张三","男",19));
//1.3第四个是直接存入HttpSession中的
httpSession.setAttribute("m2", new Managers("李四","男",18));
return "success";
}
@GetMapping("/get")
//2.利用@SessionAttribute获取数据
public String getSessionAttribute(@SessionAttribute(value = "s2") String s2,
@SessionAttribute(value = "m1") Managers m1,
@SessionAttribute(value = "m2") Managers m2,
//验证能否从@SessionAttribute中获取httpSession中的m2 //true
HttpSession httpSession,
//验证model中是否被httpSession赋予了值
Model model){
//2.1验证@SessionAttribute和@SessionAttributes的搭配使用
System.out.println(s2);
System.out.println(m1.getName());
//2.2验证httpSession和@SessionAttributes是不是同一个对象
System.out.println(httpSession.getAttribute("m2") == m2);//true
Object m21 = httpSession.getAttribute("m2");
Managers m22 = (Managers)m21;
System.out.println(m22.getName());//李四
//2.3验证model:结果表明model的生命周期仅为一次请求
System.out.println(model.getAttribute("m2") == httpSession.getAttribute("m2"));//false
//2.3如果删除
httpSession.removeAttribute("m2");
System.out.println(m2.getName());//依然存在
return "succese";
}
}
6.@ExceptionHandler异常处理
- 作用在方法上,可以指定参数(异常的类型.class)
- 作用在@Controller类下就对该控制器进行异常处理
- 作用在@ControllerAdvice类下就对所有控制器进行异常处理
7.@RequestBody
-
有了这个注解,可以接收请求体的所有内容,但是具体是什么格式的数据,需要使用其他组件如fastjson来进行处理
-
RequestBody的作用是将前端传来的json格式的数据转为自己定义好的javabean对象,需要注意的是传入数据的属性名称要和后端javabean中定义的一致
-
而 RequestParam参数在http请求的QueryString或者FromData上,适合参数个数少,且接口比较固定的情况
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用
8.@ResponseBody
- @RequestBody+@Controller = @RestController
- 可以写在方法上、方法返回值前、类上,效果相同
- 效果:@ResponseBody的作用其实是将java对象转为json格式的数据
- 适合于ajax、前后端分离的项目中,一般直接使用@RestController
9.跨域访问@CrossOrigin
- 当A域名中的前端引入了一个js访问了B域名中的资源,就会产生跨域访问
但如果访问B域名中src下的img图片,是可以直接拿来用的,不会产生跨域访问 - 因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是于当前页同域名的路径,这能有效的阻止跨站攻击。
- 多年前的项目架构较单一,跨域问题较少
解决跨域问题
-
访问域名的时候先找系统文件host文件中有没有对应的ip地址信息,如果没有就上互联网找
-
协议、主机、端口 任何一个不同即为跨域
-
靠设置5个http的头来解决
springboot解决跨域问题
总结
更多推荐
Springboot之SpringMVC常用注解
发布评论