• JSON和全局异常处理


    目录

    一,JSON

    1.json的形式

    2.SpringMVC框架如何产生上述三种格式的数据

    二,Spring的全局异常处理 

    2,全局异常处理


    哈喽铁子们今天分享JSON和全局异常处理

    先看本次目录吧

    一,JSON

    1.json的形式

    {}-->json对象

    []-->json数组

    常见的就是对象套数组:

    {

            msg:""

            code:200,

            data[]

    }--->json混合对

    2.SpringMVC框架如何产生上述三种格式的数据

    1.导入pom依赖 -----------Jackson

    2.配置(Spring-mvc.xml)适配器

            作用:做json数据的转换

    3.使用注解@responseBody能够将任何数据转成json对象

     1.导入pom依赖 -----------Jackson

    1. com.fasterxml.jackson.core
    2. jackson-databind
    3. 2.9.3
    4. com.fasterxml.jackson.core
    5. jackson-core
    6. 2.9.3
    7. com.fasterxml.jackson.core
    8. jackson-annotations
    9. 2.9.3

    2.配置(Spring-mvc.xml)适配器

    这是固定的配置

    1. "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    2. "messageConverters">
    3. "mappingJackson2HttpMessageConverter"/>
    4. "mappingJackson2HttpMessageConverter"
    5. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    6. "supportedMediaTypes">
    7. text/html;charset=UTF-8
    8. text/json;charset=UTF-8
    9. application/json;charset=UTF-8

    后台编写

    1. package com.tsq.ssm.controller;
    2. import com.tsq.ssm.Biz.ClazzBiz;
    3. import com.tsq.ssm.exception.GlobalException;
    4. import com.tsq.ssm.mapper.ClazzMapper;
    5. import com.tsq.ssm.model.Clazz;
    6. import com.tsq.ssm.util.PageBean;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.RequestMapping;
    10. import org.springframework.web.bind.annotation.ResponseBody;
    11. import javax.servlet.http.HttpServletRequest;
    12. import java.util.HashMap;
    13. import java.util.List;
    14. import java.util.Map;
    15. /**
    16. * @author dxy
    17. * @site www.javadxy.com
    18. * @company ds公司
    19. * @create 2022-08-22 16:36
    20. */
    21. @RestController
    22. @RequestMapping("clz/json")
    23. public class JsonController {
    24. @Autowired
    25. private ClazzBiz clazzBiz;
    26. @RequestMapping("/clzEdit")
    27. public String clzEdit(){
    28. System.out.println("JsonController.clzEdit");
    29. return "clzEdit";
    30. }
    31. //返回list
    32. @RequestMapping("/list")
    33. public List list(HttpServletRequest request, Clazz clazz){
    34. PageBean pageBean = new PageBean();
    35. pageBean.setRequest(request);
    36. //自动返回json数组
    37. return this.clazzBiz.listPager(clazz,pageBean);
    38. }
    39. //返回list
    40. @RequestMapping("/listMap")
    41. public List listMap(HttpServletRequest request,Clazz clazz){
    42. PageBean pageBean = new PageBean();
    43. pageBean.setRequest(request);
    44. return this.clazzBiz.listMapPager(clazz,pageBean);
    45. }
    46. //返回Map
    47. @RequestMapping("/map")
    48. public Map map(HttpServletRequest request,Clazz clazz){
    49. PageBean pageBean = new PageBean();
    50. pageBean.setRequest(request);
    51. return this.clazzBiz.listMapPager(clazz,pageBean).get(0);
    52. }
    53. //返回T
    54. @RequestMapping("/load")
    55. public Clazz load(HttpServletRequest request,Clazz clazz){
    56. PageBean pageBean = new PageBean();
    57. pageBean.setRequest(request);
    58. return this.clazzBiz.listPager(clazz,pageBean).get(0);
    59. }
    60. //混合格式对象
    61. @RequestMapping("/hunhe")
    62. public Map hunhe(HttpServletRequest request,Clazz clazz){
    63. PageBean pageBean = new PageBean();
    64. pageBean.setRequest(request);
    65. List lst = this.clazzBiz.listPager(clazz, pageBean);
    66. Map map = new HashMap();
    67. map.put("data",lst);
    68. map.put("pagebean",pageBean);
    69. return map;
    70. }
    71. }

    解析:

    @RequestMapping:窄化路径 

    @ResponseBody:区分注解(添加它后,会绕过本地视图解析器)


    @ResponseBody+@Controller=@RestController

    业务逻辑层

    public List mapListPager(Clazz clazz,PageBean pageBean) {
            return clazzMapper.mapListPager(clazz);
        }

    Mapper.xml(自动生成的xml文件)

    测试

    建一个jsp界面

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: zjjt
    4. Date: 2022/8/22
    5. Time: 18:16
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. 测试json数据返回

    二,Spring的全局异常处理 


    1.非全局异常处理问题演示
    异常处理的三种形式:

            1.Springmvc.xml中进行统一配置及处理

            2.实现接口管理

            3.@ControllerAdvice

    异常处理的思路:

    参考images中的《springmvc全局异常处理思路.png》

       系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

     SpringMVC异常分类:

            使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;

            实现Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器;

            使用@ControllerAdvice + @ExceptionHandler

    1. @RequestMapping("/load")
    2. public Clazz load(HttpServletRequest request,Clazz clazz){
    3. PageBean pageBean = new PageBean();
    4. pageBean.setRequest(request);
    5. if(true)
    6. throw new GlobalException("系统繁忙,请参考E007;");
    7. return this.clazzBiz.listPager(clazz,pageBean).get(0);
    8. }
    1. @Override
    2. public List listMapPager(Clazz clazz, PageBean pageBean) {
    3. if(true)
    4. throw new RuntimeException("系统繁忙!异常存在于ClazzBizImpl中list方法");
    5. return clazzMapper.listMapPager(clazz);
    6. }

    大部分用户的像这样的错误肯定是看不懂的

    2,全局异常处理

    SpringMVC自带的简单异常处理器

    1. "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    2. "defaultErrorView" value="error"/>
    3. "exceptionAttribute" value="ex"/>
    4. "exceptionMappings">
    5. "java.lang.RuntimeException">error

    出错时会自动跳到指定的jsp界面,怎么展示取决于以上配置如何配

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: zjjt
    4. Date: 2022/8/22
    5. Time: 18:43
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. 错误信息页面
    10. ${msg}

    11. ${ex}

    通过HandlerExceptionResovler接口实现全局异常 

    提示:在运行之前需将SpringMVC中关于异常处理的配置取消掉

    1. package com.tsq.ssm.exception;
    2. import org.springframework.stereotype.Component;
    3. import org.springframework.web.servlet.HandlerExceptionResolver;
    4. import org.springframework.web.servlet.ModelAndView;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. /**
    8. * @author tsq
    9. * @site www.javadxy.com
    10. * @company ds公司
    11. * @create 2022-08-22 19:13
    12. * 处理全局异常
    13. */
    14. //注释掉为了运行时不受它的影响
    15. //@Component
    16. public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver {
    17. /**
    18. *
    19. * @param httpServletRequest
    20. * @param httpServletResponse
    21. * @param o 目标对象
    22. * @param e 目标对象执行,出现的异常对象
    23. * @return
    24. */
    25. // @Override
    26. public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    27. ModelAndView mv = new ModelAndView();
    28. mv.setViewName("error");
    29. if(e instanceof GlobalException){
    30. GlobalException exception =(GlobalException) e;//强转
    31. mv.addObject("ex",exception.getMessage());
    32. mv.addObject("msg","全局异常,错误码501");
    33. }else if(e instanceof RuntimeException){
    34. RuntimeException exception = (RuntimeException) e;
    35. mv.addObject("ex",exception.getMessage());
    36. mv.addObject("msg","运行时异常,错误码601");
    37. }
    38. return mv;
    39. }
    40. }

    测试代码的改变

    1. //返回T
    2. @RequestMapping("/load")
    3. public Clazz load(HttpServletRequest request,Clazz clazz){
    4. PageBean pageBean = new PageBean();
    5. pageBean.setRequest(request);
    6. if(true)
    7. throw new GlobalException("系统繁忙,请参考E007;");
    8. return this.clazzBiz.listPager(clazz,pageBean).get(0);
    9. }

    jsp界面

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: zjjt
    4. Date: 2022/8/22
    5. Time: 18:43
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. 错误信息页面
    10. ${msg}

    11. ${ex}

    使用@ControllerAdvice+@ExceptionHandler实现

    本次JSON和全局异常处理分享结束了我们下次见

  • 相关阅读:
    LeetCode笔记:Biweekly Contest 91
    python毕业设计作品基于django框架 电影院购票选座系统毕设成品(7)中期检查报告
    极速接入,无损体验,FairGuard加固游戏包体实测
    排序算法-插入排序
    Java项目:SSM的网上购物商城系统
    SQL练习---619.出现一次的最大数字
    C#大作业——学生信息管理系统
    思科路由器地址转换配置
    [Linux] 1.Linux的简介
    STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)
  • 原文地址:https://blog.csdn.net/weixin_65565181/article/details/126502996