Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

这篇具有很好参考价值的文章主要介绍了Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习视频:【编程不良人】继spring之后快速入门springmvc,面对SpringMVC不用慌

第七章、SpringMVC与Ajax集成

  • 引入相关依赖

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>
    
  • 开发控制器

    @Controller
    @RequestMapping("json")
    public class JsonController {
        /**
         * 引入jackson库可以使用@ResponseBody自动转换为json格式数据【推荐】
         */
        @RequestMapping("showAll")
        public @ResponseBody List<User> findAll() {
            //1.收集数据
            //2.调用业务
            List<User> users = new ArrayList<>();
            users.add(new User(UUID.randomUUID().toString(), "小红", 23, new Date()));
            users.add(new User(UUID.randomUUID().toString(), "小名", 29, new Date()));
            users.add(new User(UUID.randomUUID().toString(), "小撒", 25, new Date()));
            return users;
        }
        /**
         * 传统写法:引入阿里fastjson手动转换为json格式数据
         */
        @RequestMapping("findAll")
        public void findAll(HttpServletResponse response) throws IOException {
            //1.收集数据
            //2.调用业务
            List<User> users = new ArrayList<>();
            users.add(new User(UUID.randomUUID().toString(), "小陈", 23, new Date()));
            users.add(new User(UUID.randomUUID().toString(), "小名", 29, new Date()));
            users.add(new User(UUID.randomUUID().toString(), "小撒", 25, new Date()));
            // fastjson
            String s = JSONObject.toJSONStringWithDateFormat(users, "yyyy-MM-dd");
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().println(s);
        }
    }
    
  • 日期格式修正

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date bir;
    

    Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

    可以正常响应

第八章、SpringMVC的拦截器

Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

  1. 拦截器 :Interceptor 拦截 中断

    类似于javaweb中的Filter,不过没有Filter那么强大

  2. 作用

    Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日志记录、权限验证、数据处理等。

  3. 拦截器特点

    1. 请求到达会经过拦截器,响应回来同样会经过拦截器
    2. 拦截器只能Controller的请求,不能拦截jsp、静态资源相关请求
    3. 拦截器可以中断请求轨迹
  4. 开发拦截器

    1. 类 实现implements HandlerInterceptor接口中的方法

    2. 配置拦截器

      注册拦截器对象 bean id class=””

      配置拦截器拦截请求路径

  • 编码和测试结果

    拦截器接口的实现

    public class MyInterceptor implements HandlerInterceptor {
        @Override
        //**参数1:当前请求对象  参数2:当前请求响应对象 参数3:当前请求的控制器对应的方法对象**
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("handler = " + ((HandlerMethod)handler).getMethod().getName() );
            System.out.println("MyInterceptor.preHandle");
            //强制用户登录
            Object user = request.getSession().getAttribute("user");
    //        if (user == null) {
    //            // 重定向到登录页面
    //            response.sendRedirect(request.getContextPath() + "/login.jsp");
    //            return false;
    //        }
            return HandlerInterceptor.super.preHandle(request, response, handler);
        }
    
        @Override
        // 参数1、2、3同上 **参数4:当前控制器方法的返回值**
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("modelAndView = " + modelAndView);
            System.out.println("MyInterceptor.postHandle");
            HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        }
    
        @Override
        // 参数1、2、3同上 **参数4:请求过程中出现异常时的异常对象**
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("MyInterceptor.afterCompletion");
            if (ex != null) {
                System.out.println("ex.getMessage() = " + ex.getMessage());
            }
            HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        }
    }
    

    dispatcher.xml 配置拦截器

    <!--注册拦截器-->
    <bean id="myInterceptor" class="com.baizhi.interceptors.MyInterceptor"/>
    <!--配置拦截器-->
    <mvc:interceptors>
        <!--配置一个拦截器-->
        <mvc:interceptor>
            <!-- mvc:mapping 代表拦截哪个请求路径-->
            <mvc:mapping path="/json/test"/>
            <!--排除具体地拦截请求-->
            <mvc:exclude-mapping path="/json/showAll"/>
            <!--使用拦截器-->
            <ref bean="myInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    

    进行测试

    @RequestMapping("test")
        public String test() {
            System.out.println("JsonController.test");
    //        throw new RuntimeException();
            return "index";
        }
    

    Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

    按预期执行顺序执行

    看到拦截器的执行顺序,我们会联想到Spring中的AOP,两者的底层逻辑都是通过动态代理实现的,虽然拦截器和AOP都可以用于在请求处理过程中添加额外的逻辑,但拦截器更专注于请求处理阶段的任务,而AOP更适用于在不同模块中实现横切关注点的功能。

关于动态代理和AOP底层可以看之前学习的:Spring5学习随笔-AOP底层实现(JDK、CGlib)、实现切面(@Aspect)
Spring5学习随笔-AOP系列Spring动态代理

第九章、SpringMVC中的全局异常处理

  1. SpringMVC作为一个控制主要作用

    1. 处理请求 接收请求数据 调用业务对象
    2. 请求响应 跳转对应视图展示数据

    Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

  2. 现有控制器开发存在问题?

    1. 在处理用户请求出现运行时异常直接响应给用户的是一个错误节目,对于用户的使用体验不友好。

      Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

      Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

      没有使用全局异常处理时

  3. 全局异常处理机制

    作用:用来解决整合系统中任意一个控制器抛出异常时的统一处理入口

  • 编码

    开发控制类

    public class GlobalExceptionResolver implements HandlerExceptionResolver {
        /**
         * 用来处理发生异常时的方法
         *
         * @param request  当前请求对象
         * @param response 当前请求对应的响应对象
         * @param handler  当前请求的方法对象
         * @param ex       当前出现异常时的异常对象
         * @return 出现异常时展示视图和数据
         */
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            System.out.println("进入全局异常处理器,获取的异常信息为:" + ex.getMessage());
            ModelAndView modelAndView = new ModelAndView();
            // 基于不同业务异常跳转到不同页面
            modelAndView.setViewName("redirect:/error.jsp"); // return "error" -> error.jsp
            // modelAndView中的model默认放到request作用域,如果使用redirect跳转,model中数据会自动拼接到跳转url
            modelAndView.addObject("msg", ex.getMessage());
            return modelAndView;
        }
    }
    

    dispatcher.xml 配置全局异常处理类

    <bean class="com.baizhi.handlerexception.GlobalExceptionResolver"/>
    
  • 基于不同业务异常跳转不同页面

    // 基于不同业务异常跳转到不同页面
    if (ex instanceof NotFoundException) {
        modelAndView.setViewName("notFound");
    } else if (ex instanceof GeneralException) {
        modelAndView.setViewName("generalException");
    }
    

Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)

异常处理器的工作流程文章来源地址https://www.toymoban.com/news/detail-748629.html

到了这里,关于Spring MVC学习随笔-Ajax集成(JSON格式返回数据)、拦截器(MyInterceptor)、全局异常处理(GlobalExceptionResolver)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC学习随笔-控制器(Controller)开发详解:接受客户端(Client)请求参数

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 💡 1. 接受客户端(client)请求参数[讲解]2. 调用业务对象3. 页面跳转 所谓简单变量:指的就是8种基本类型+String这些类型的变量。把这些类型的变量,作为控制器方法的形参,用于接受

    2024年02月05日
    浏览(46)
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 3.流程跳转 在web.xml里添加Servlet然后执行 可以看到通过url拼接可以获取传递的数据 四种跳转指的是:在SpringMVC中控制器与JSP或者控制器与控制器之间的跳转。 Controller - - forward — JSP Co

    2024年02月05日
    浏览(47)
  • 【Spring MVC学习】连接 && 接收请求参数 && 响应返回参数

    目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、@RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、@ResponseBody注解:表示返回的是数据 🌷 3、组合注解@RestController = @ResponseBody + @Controller 🌷4、支持Get请求的2种写法@GetMapping + @RequestMapp

    2024年02月16日
    浏览(33)
  • Flask - 返回 json 格式数据 - json 数据传输支持中文显示

    在 Flask 配置中加入下面一行代码就OK了。 Flask 返回 Json python flask 返回json数据 Flask 让jsonify返回的json串支持中文显示 flask或flask-restful的接口开发,返回的json数据能显示中文的方法

    2024年02月07日
    浏览(36)
  • Django接口返回JSON格式数据报文

    目录 遇到问题 Django返回json结构报文 不可行方式python json 可行方式JsonResponse+QuerySet.values()。 python的两个web框架,flask和django,两者都具有view 模板的章节,但是当前开发一个应用,大部分采用前后端分离的合作方式。因此必然面对的一个事情就是接口返回json格式的数据报文。

    2024年02月15日
    浏览(39)
  • Spring MVC学习随笔-控制器(Controller)开发详解:调用业务对象、父子工厂拆分(applicationContext.xml、dispatcher.xml)

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 💡 1. 接收客户端(Client)请求参数【讲解完毕】2. 调用业务对象【讲解】3. 页面跳转 dispatcher.xml DAO Service Controller 现有SSM开发中存在的问题 MVC层的对象(Controller, mvc:annotation-driven/,视图解

    2024年02月05日
    浏览(40)
  • Spring MVC JSON 数据交互

    🔔 JSON 语法 | 菜鸟教程 为实现浏览器与控制器类之间的 JSON 数据交互, Spring MVC 提供了 MappingJackson2HttpMessageConverter 实现类默认处理 JSON 格式请求响应。该实现类利用 Jackson 开源包读写 JSON 数据,将 Java 对象转换为 JSON 对象和 XML 文档,同时也可以将 JSON 对象和 XML 文档转换为

    2024年02月16日
    浏览(31)
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 衔接上文Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一) SpingMVC中request作用域的处理 代码 Model、ModelMap相关细节分析 通过Model、ModelMap进行作用域处理,可以解决

    2024年02月05日
    浏览(41)
  • Spring Boot学习随笔- RestFul API(@RestController、@RequestBody、@PathVariable),使用ResponseEntity+HttpStatus作为返回值

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 什么是REST REST 全称是 Resource Representational State Transfer ,中文意思是表述性状态转移,它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。他在论文中表示:我这篇文章的目的就是想在符合

    2024年02月04日
    浏览(32)
  • C# MVC ajax将json传到后台接口

    前台: 后台:

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包