1.全局异常处理

  1. @ControllerAdvice处理全局数据,一般搭配@ExceptionHandler@ModelAttribute以及@InitBinder使用。
  1. @ControllerAdvice
  2. public class CustomExceptionHandler {
  3. @ExceptionHandler(MaxUploadSizeExceededException.class)
  4. public ModelAndView uploadException(MaxUploadSizeExceededException e) throws IOException {
  5. ModelAndView mv = new ModelAndView();
  6. mv.addObject("msg", "上传文件大小超出限制!");
  7. mv.setViewName("error");
  8. return mv;
  9. }
  10.  
  11. @ExceptionHandler(Exception.class)
  12. public void myexce(Exception e) {
  13. System.out.println("myexce>>>"+e.getMessage());
  14. }
  15. }

2.添加全局数据

  @ModelAttribute配置全局数据,如下:key="info",value="map",

  1. @ControllerAdvice
  2. public class GlobalConfig {
  3. @ModelAttribute(value = "info")
  4. public Map<String,String> userInfo() {
  5. HashMap<String, String> map = new HashMap<>();
  6. map.put("username", "罗贯中");
  7. map.put("gender", "男");
  8. return map;
  9. }
  10. }

controller:

  1. @GetMapping("/hello")
  2. @ResponseBody
  3. public void hello(Model model) {
  4. Map<String, Object> map = model.asMap();   //获取到全局数据key="info",value="map"
  5. Set<String> keySet = map.keySet();
  6. Iterator<String> iterator = keySet.iterator();
  7. while (iterator.hasNext()) {
  8. String key = iterator.next();
  9. Object value = map.get(key);
  10. System.out.println(key + ">>>>>" + value);
  11. }
  12. }

http://localhost:8080/hello

3.请求参数预处理

  1. @ControllerAdvice结合@InitBinder可以实现请求参数预处理,即将表单中的数据绑定到实体类上时进行一些额外的处理。
  2.  
  3. 问题:两个实体类,属性名字一致,传递参数时参数无法指定具体的一个,如下,两个实体类都有name属性,url拼接时出现问题。

  1. demo:
    实体类:
  1. public class Author {
  2. private String name;
  3. private int age;
  4. 。。。。。。。。
  5. }
  6. public class Book {
  7. private String name;
  8. private String author;
  9. 。。。。。。。。。。
  10. }
  1. @ControllerAdvice
  2. public class GlobalConfig {
  1. @InitBinder("b")
    public void init(WebDataBinder binder) {
    binder.setFieldDefaultPrefix("b."); //处理@ModelAttribute("b")的参数
  1. }
    @InitBinder("a")
    public void init2(WebDataBinder binder) {
    binder.setFieldDefaultPrefix("a.");         //处理@ModelAttribute("a")的参数
  1. }
    }

controller:

  1. @GetMapping("/book")
  2. @ResponseBody
  3. public String book(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) {
  4. return book.toString() + ">>>" + author.toString();
  5. }

  1.  

SpringBoot整合WEB开发--(四)@ControllerAdvice的更多相关文章

  1. springboot整合web开发(整合servlet、filter、listener、访问静态、文件上传)

    整合servlet 1.继承HttpServlet 2.添加@WebServlet注解 @WebServlet(name="FirstServlet",urlPatterns=&q ...

  2. SpringBoot整合WEB开发--(九)整合Servlet,Filter,Listener

    简介: 如果需要整合第三方框架时,可能还是不得不使用Servlet,Filter,Listener,Springboot中也有提供支持. @WebServlet("/my") pu ...

  3. SpringBoot整合WEB开发--(五)自定义错误页

    目的与原理: 处理异常时,若我们想根据实际情况返回不同的页面,@ControllerAdvice与@ExceptionHandler,一般用于处理应用级别的异常,一些容器级别的错误就处理不了,例如Fi ...

  4. SpringBoot整合WEB开发--(十)配置AOP

    简介: SpringBoot框架中对AOP有很好的支持,简单AOP概念: JoinPoint(连接点):类里面可以被增强的方法即为连接点,例如,想修改哪个方法的功能,那么该方法就是一个连接点. Poi ...

  5. SpringBoot整合WEB开发--(八)启动任务系统

    简介: 有一些特殊的任务需要在系统启动时执行,例如配置文件的加载,数据库初始化等操作,如果没有使用SpringBoot,这些问题可以在Listener中解决.SpringBoot提供了两种解决方案:C ...

  6. SpringBoot整合WEB开发--(六)CROS支持

    简介: CROS(Cross-Origin Resource Sharing)是由W3C制定的一种跨域资源共享技术标准,其目的为了解决前端的跨域请求,在JavaEE开发中,最常见的前端跨域请求解决方案 ...

  7. SpringBoot整合WEB开发--(三)文件上传

    文件上传: Java中文件上传一共涉及到两个组件,CommonsMultipartResolver和StandardServletMultipartResolver,其中CommonsMultipar ...

  8. SpringBoot整合WEB开发--(二)静态资源访问

    1.默认策略: 静态资源的位置一共5个,开发者可以将静态资源放到其中任意一个,分别是: "classpath:/META-INF/resources/", "classp ...

  9. SpringBoot整合WEB开发--(一)处理JSON返回数据

    1.使用默认的json转换HttpessageConverter Json是目前主流的前后端数据传输方式,SpringMVC中使用消息转化器HttpMessageConverter对JSON的转换提供 ...

随机推荐

  1. ISE post-place&route仿真准备

    ISE post-place&route仿真准备 使用目的:post-place&route仿真是综合后考虑门延时而进行的仿真.因为考虑到各个门的延时,所以可以发现行为仿真(behav ...

  2. 破解版 Teamver 安装

    一 .下载安装包 百度网盘链接:https://pan.baidu.com/s/18nEKAMmHEqU66Dq_aCnEYQ 提取码:2x2q 二.解压缩后,直接运行红框内绿色文件即可

  3. python线程的条件变量Condition的用法实例

      Condition 对象就是条件变量,它总是与某种锁相关联,可以是外部传入的锁或是系统默认创建的锁.当几个条件变量共享一个锁时,你就应该自己传入一个锁.这个锁不需要你操心,Condition 类会 ...

  4. 【Thread】java线程之对象锁、类锁、线程安全

    说明: 1.个人技术也不咋滴.也没在项目中写过线程,以下全是根据自己的理解写的.所以,仅供参考及希望指出不同的观点. 2.其实想把代码的github贴出来,但还是推荐在初学的您多亲自写一下,就没贴出来 ...

  5. JS阻止事件冒泡与浏览器默认行为

    阻止冒泡 W3C的方法是e.stopPropagation() IE是e.cancelBubble = true; 阻止默认行为 W3C的方法e.preventDefault(), IE是e.retu ...

  6. 新建Microsoft Word文档

    问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫<新建Microsoft Word文档>吗?”,L大喜,一拍桌子,说:“好,就叫这个名字了.” ...

  7. springMVC三大组件、spring主要jar包、

    一.springMVC三大组件 处理器映射器   RequestMappingHandlerMapping 处理器适配器 RequestMappingHandlerAdapter 视图解析器  Int ...

  8. Android studio中为项目添加模块依赖的过程

    https://blog.csdn.net/cheng__lu/article/details/74574582 Android studio中为项目添加模块依赖的过程 1.点击菜单file>p ...

  9. 2020牛客寒假算法基础集训营6 C 汉诺塔 (dp 最长下降子序列)

    https://ac.nowcoder.com/acm/contest/3007/C 将木板按照Xi从小到大排序,将这时的Yi数列记为Zi数列,则问题变成将Zi划分为尽可能少的若干组上升子序列. 根据 ...

  10. P3329 [ZJOI2011]最小割

    题目描述 小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: 对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点 s 和 t 不在同一个部分中,则称这 ...