SpringMVC异步异常拦截器

SpringMVC异步调用异常拦截器

Spring异步数据处理

  • 如果返回json格式的字符串使用@ResponseBody
  • 如果对于异步传递的数据封装成为一个实体类在参数中使用@RequestBody

跨域访问

  • 跨域的定义:

    • 协议不同
    • IP地址不同
    • 端口不同
    • 以上其中一个不同就视为跨域
  • 解决方案

    • 使用@CrossOrigin注解

    • 类型:方法注解,类注解

    • 作用:设置当前处理器方法/处理器类中所有的方法支持跨域访问

    • 示例

      @RequestMapping("/ajaxReturnJson")
      @ResponseBody
      @CrossOrigin
      public User ajaxReturnJson(){
      User user = new User();
      user.setName("Jockme");
      user.setAge(40);
      return user;
      }
      

拦截器

  • Spring的处理流程

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SyAOdQzK-1595504940255)(F:\MarkDownOnte\学习笔记\Spring\assets\1595298761975.png)]

  • 拦截器与过滤器异同点

    • 过滤器是始于servlet的一种技术,拦截器属于springMVC的技术

    • 如果使用了过滤器是在dispatherServlet对响应之前进行拦截过滤,处理完毕以后在经过过滤器返回

    • 拦截器是对经过dispatherServlet分发以后的响应进行拦截。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQAtHvLt-1595504940258)(F:\MarkDownOnte\学习笔记\Spring\assets\1595299110640.png)]

  • 自定义拦截器

    • package com.wx.interceptor;
      
      import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      /**
       * 自定义的拦截器
       * 实现HandlerInterceptor接口
       */
      public class MyInterceptor implements HandlerInterceptor {
          /**
           *自定义拦截器
           * @param request
           * @param response
           * @param handler
           * @return 如果返回的结果false就拦截请求
           * @throws Exception
           */
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              System.out.println("拦截器前置处理");
      //        return true;
              response.getWriter().write("RequestAreBlocked");
              return false;
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      
              System.out.println("后置处理");
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              System.out.println("完成以后通知");
          }
      }
      
      

      在配置文件中加载拦截器

      <!--加载自定义拦截器-->
          <mvc:interceptors>
              <mvc:interceptor>
                  <!--拦截路径-->
                  <mvc:mapping path="/*"/>
                  <!--自定义拦截器坐标-->
                  <bean class="com.wx.interceptor.MyInterceptor"/>
              </mvc:interceptor>
          </mvc:interceptors>
      
    • 拦截器参数

      ModelAndView modelAndView  对于请求正常处理完毕以后对于响应数据进行后置处理
      
    • 拦截器的执行顺序

      • 配置顺序就是执行顺序
      • 当拦截器运行中断仅运行配置在前面的拦截器的afterCompletion操作

SpringMVC的异常处理

  • 设置类实现HandlerExceptionResolver

    @Component
    public class MyExceptionResolver implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
            ModelAndView mav = new ModelAndView();
            System.out.println("正在处理异常");
            // 设置异常的信息
            mav.addObject("msg","异常信息");
            // 设置跳转的页面
            mav.setViewName("error.jsp");
            return mav;
        }
    }
    
  • 实现类的方式是在dispatherservlet无法拦截到参数类型转换异常

  • 使用注解方式可以拦截到参数类型转换异常

    @Component
    @ControllerAdvice // 标记当前类是异常处理类
    public class MyAnnotationExceptionResolver {
        @ExceptionHandler(Exception.class) // 设置要处理的异常
          @ResponseBody // 以响应体的方式处理数据
        public Exception doException(Exception ex){
          // 打印堆栈跟踪信息到控制台
            ex.printStackTrace();
            return ex;
        }
    }
    
    • 在方法的前面要加上@ResponseBody,不然浏览器会认为是在跳转页面
  • 项目异常处理方案

    • 异常分类:
      • 业务异常
        • 发送对应消息给用户,提醒规范操作
      • 系统异常
        • 发送固定消息给用户,安抚用户
      • 其他异常
        • 记录异常发消息给相关人员处理异常

文件上传下载

  • 导入相关的组件

     <!--文件上传下载组件-->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.4</version>
        </dependency>
    
  • 在配置类中导入相关的bean

     <!--配置文件上传bean-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    
  • 在文件上传表单中的name属性与方法参数保持一致

    <form action="/fileupload" method="post" enctype="multipart/form-data">
        上传:<input type="file" name="aaa一致"/>
        <br/>
        <input type="submit" value="提交"/>
    </form>
    
  • 处理上传文件类

     /**
         * 文件上传下载
         */
        @RequestMapping("/fileupload") 
        public String fileupload(MultipartFile aaa一致) throws IOException {
            // 设置文件存储的地点			MultipartFile参数名必须与表单中name属性一直
            file.transferTo(new File("a.png"));
            // 跳转页面
            return "file.jsp";
        }
    

Restful

  • Restful (Representational state transfer)表象层状态转变 简介:
    • 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
  • 优点:
    • 隐藏资源的访问行为,通过地址无法知道是何种操作
    • 书写简化

Restful行为方式

GET http://localhost/user/1 GET 通过get方式访问数据表示获取数据
POST http://localhost/user POST 通过POST方式访问数据表示保存数据
PUT http://localhost/user PUT 通过put方式更新数据
DELETE http://localhost/user DELETE 通过delete访问方式删除数据

Restful行为方式

GET http://localhost/user/1 GET 通过get方式访问数据表示获取数据
POST http://localhost/user POST 通过POST方式访问数据表示保存数据
PUT http://localhost/user PUT 通过put方式更新数据
DELETE http://localhost/user DELETE 通过delete访问方式删除数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值