• SpringMVC(Json和全局异常处理)


    目录

    1. Json三种数据格式

    1.1 添加相关依赖和配置文件

    1.2 对象格式

    1.3 list格式

    1.4 混合格式

     2. SpringMVC全局异常处理

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

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

    2.3 使用@ControllerAdvice + @ExceptionHandle


    1. Json三种数据格式

     1.1 添加相关依赖和配置文件

    • 在pom.xml文件里面添加以下依赖 
    1. <dependency>
    2. <groupId>com.fasterxml.jackson.coregroupId>
    3. <artifactId>jackson-databindartifactId>
    4. <version>2.9.3version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.fasterxml.jackson.coregroupId>
    8. <artifactId>jackson-coreartifactId>
    9. <version>2.9.3version>
    10. dependency>
    11. <dependency>
    12. <groupId>com.fasterxml.jackson.coregroupId>
    13. <artifactId>jackson-annotationsartifactId>
    14. <version>2.9.3version>
    15. dependency>
    • 在spring-mvc.xml文件里面添加以下配置

    1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    2. <property name="messageConverters">
    3. <list>
    4. <ref bean="mappingJackson2HttpMessageConverter"/>
    5. list>
    6. property>
    7. bean>
    8. <bean id="mappingJackson2HttpMessageConverter"
    9. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    10. <property name="supportedMediaTypes">
    11. <list>
    12. <value>text/html;charset=UTF-8value>
    13. <value>text/json;charset=UTF-8value>
    14. <value>application/json;charset=UTF-8value>
    15. list>
    16. property>
    17. bean>

     1.2 对象格式

     在请求处理方法中添加@ResponseBody注解,将返回结果直接转换成JSON

     注:此请求处理方法返回的已经不是视图了 

    1. @RequestMapping("/toJsonLoadBook")
    2. @ResponseBody
    3. public Book toJsonLoadBook(Book book){
    4. Book b = iBookService.selectByPrimaryKey(book.getBookId());
    5. return b;
    6. }

     1.3 list格式

    1. @RequestMapping("/toJsonListBook")
    2. @ResponseBody
    3. public List toJsonListBook(){
    4. List list = iBookService.listBook(null, null);
    5. return list;
    6. }

     1.4 混合格式

    • 单个 
    1. @RequestMapping("/toJsonMap1")
    2. @ResponseBody
    3. public Map toJsonMap1(Book book) {
    4. Map map = new HashMap<>();
    5. map.put("total", 888);
    6. map.put("success", true);
    7. //获取数据
    8. List> maps = iBookService.jsonMap(book.getBookId());
    9. map.put("data", maps);
    10. return map;
    11. }
    •  多个
    1. @RequestMapping("/toJsonMap2")
    2. @ResponseBody
    3. public Map toJsonMap2(Book book) {
    4. Map map = new HashMap<>();
    5. map.put("total", 888);
    6. map.put("success", true);
    7. //获取数据
    8. List> maps = iBookService.jsonMap1(book);
    9. map.put("data", maps);
    10. return map;
    11. }

     2. SpringMVC全局异常处理

    • 注!!!需先创建一个error.jsp抛出异常而呈现在前端页面的类 

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

    • 在spring-mvc.xml文件里面添加以下配置
    1. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    2. <property name="defaultErrorView" value="error"/>
    3. <property name="exceptionAttribute" value="ex"/>
    4. <property name="exceptionMappings">
    5. <props>
    6. <prop key="java.lang.RuntimeException">errorprop>
    7. props>
    8. property>
    9. bean>
    • Controller层代码

     在controller层验证判断id大与500就会抛出异常在spring-mvc.xml配置文件加上的配置就会处理异常抛出跳转到你创建的error.jsp那个页面

    1. @RequestMapping("/toJsonLoadBook")
    2. @ResponseBody
    3. public Book toJsonLoadBook(Book book){
    4. if(book.getBookId()>=500){
    5. throw new RuntimeException("书本ID大于500,抛出异常");
    6. }
    7. Book b = iBookService.selectByPrimaryKey(book.getBookId());
    8. b.setDate(new Date());
    9. return b;
    10. }

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

    1. package com.jmh.mybatis.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. * 全局异常处理
    9. */
    10. @Component
    11. public class GloabException implements HandlerExceptionResolver {
    12. @Override
    13. public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, java.lang.Exception e) {
    14. //定义一个视图
    15. ModelAndView mv=new ModelAndView();
    16. //判断ex是否和Run异常有关系
    17. if(e instanceof RuntimeException){
    18. //强转
    19. RuntimeException e1=(RuntimeException)e;
    20. //将获取到的数据保存到作用域里面
    21. mv.addObject("msg", e1.getMessage());
    22. }
    23. //设置跳转页面
    24. mv.setViewName("error");
    25. return mv;
    26. }
    27. }
    • Controller层
    1. @RequestMapping("/toJsonLoadBook")
    2. @ResponseBody
    3. public Book toJsonLoadBook(Book book){
    4. if(book.getBookId()>=500){
    5. throw new RuntimeException("书本ID大于500,抛出异常");
    6. }
    7. Book b = iBookService.selectByPrimaryKey(book.getBookId());
    8. b.setDate(new Date());
    9. return b;
    10. }

     2.3 使用@ControllerAdvice + @ExceptionHandler

    • 定义异常通知 
    1. package com.jmh.mybatis.exception;
    2. /**
    3. * 异常通知
    4. */
    5. public class IdOverException extends RuntimeException{
    6. public IdOverException() {
    7. super();
    8. }
    9. public IdOverException(String message) {
    10. super(message);
    11. }
    12. public IdOverException(String message, Throwable cause) {
    13. super(message, cause);
    14. }
    15. public IdOverException(Throwable cause) {
    16. super(cause);
    17. }
    18. protected IdOverException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    19. super(message, cause, enableSuppression, writableStackTrace);
    20. }
    21. }
    •  异常类
    1. package com.jmh.mybatis.exception;
    2. import org.springframework.web.bind.annotation.ControllerAdvice;
    3. import org.springframework.web.bind.annotation.ExceptionHandler;
    4. import org.springframework.web.bind.annotation.RestControllerAdvice;
    5. import org.springframework.web.servlet.ModelAndView;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. @ControllerAdvice
    9. public class Exception {
    10. @ExceptionHandler
    11. public ModelAndView resolveException(java.lang.Exception e) {
    12. //定义一个视图
    13. ModelAndView mv=new ModelAndView();
    14. //判断ex是否和Run异常有关系
    15. if(e instanceof RuntimeException){
    16. //强转
    17. RuntimeException e1=(RuntimeException)e;
    18. //将获取到的数据保存到作用域里面
    19. mv.addObject("msg", e1.getMessage());
    20. }
    21. //设置跳转页面
    22. mv.setViewName("error");
    23. return mv;
    24. }
    25. }
    •  Controller层
    1. @RequestMapping("/toJsonLoadBook")
    2. @ResponseBody
    3. public Book toJsonLoadBook(Book book){
    4. if(book.getBookId()>=500){
    5. throw new IdOverException("书本ID大于500,抛出异常");
    6. }
    7. Book b = iBookService.selectByPrimaryKey(book.getBookId());
    8. b.setDate(new Date());
    9. return b;
    10. }


  • 相关阅读:
    RestTemplate源码debug:可变形参引发的问题
    【Flink 实战系列】Flink CDC 实时同步 Mysql 全量加增量数据到 Hudi
    根据产品名称返回价格(同步和异步实现)
    openssl命令行:RSA的用法-- 终极版
    关于Nginx跨域配置的一些问题,详解如何正确的配置跨域
    你需要了解的关于 React 的知识 useEvent钩子 RFC
    【LeetCode】【剑指offer】【n个骰子的点数】
    STM32:串口发送
    【元胞自动机】基于matlab元胞自动机考虑驾驶行为的自动—求解手动驾驶混合交通流问题【含Matlab源码 2060期】
    jmeter 二次开发详解
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/126422240