• JSON和全局异常处理


    目录

    1️⃣JSON

    一、什么是json?

    二、与javascript的关系

    三、语法格式

    四、注意事项

    五、总结

    六,使用json

    1导入pom.xml依赖

    2.配置spring-mvc.xml

    3. @ResponseBody注解使用

     创建一个web层控制器

     编写ClazzBiz

    实现接口

    测试:

    2.异常处理机制

    1.为什么要全局异常处理?

    2.异常处理思路

    3.SpringMVC异常分类

    4.异常处理方法

     方法一

    方法二

     方法三


    1️⃣JSON

    一、什么是json?

    json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。【以上来自于百度百科】

    简单来说:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。
    类似于:

    • 国际通用语言-英语
    • 中国56个民族不同地区的通用语言-普通话

    但真要说json到底是什么,以及json的作用,我们总是难以描述,下面我将从各个方面来进行说明:

    二、与javascript的关系

    相信很多程序员只要一提到json总会想到js,因为json不仅含有js的名字,其格式也与js中对象(object)的格式并无一二。

    这里我们要进行一个说明,首先json是基于ECMAScript语法,但这并不意味着json必须在js中使用,或者必须要产生什么联系,json在js中的处理也并没有比其他语言占有更多优势。只是因为语法相似,而使得js开发者能更快的上手json而已。

    事实上几乎所有编程语言中都有对json数据转换的支持:
    js中,json与对象的转换:JSON.parse()/JSON.stringify();
    php中,json与数组的转换:json_encode()/json_decode();
    java中,json与对象的转换:fromJson()/toJson();
    python中,json与对象的转换:json.dumps()/json.loads();

    三、语法格式

    那么json的语法格式到底是怎样的呢?我们先来看一段json数据:
    {"name":"admin","age":18}
    这就是一种最简单的json,如果有学过js的开发者是不是发现json的语法与js中object的语法几乎相同
    但是,注意:

    • json是一种纯字符数据,不属于编程语言
    • json的语法与js中object的语法几乎一致(下一部分说明不同)
    • json数据以键值对形式存在,多个键值对之间用逗号,隔开,键值对的键和值之间用冒号:连接
    • json数据在js对象的基础上做了严格化
    • json数据中的键值对可以使用编程语言中所谓的关键字(*见注意事项)
    • json的数据可以用花括号{}或中括号[]包裹,对应js中的object和array

    四、注意事项

    为什么说几乎相同,而不是完全相同呢?接下来我们要说的就是json与js中对象的不同点,也是json严格要求的部分:

    • json的键值对的部分,必须用双引号"包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)
    • json的键值对的部分,不允许出现函数functionundefinedNaN,但是可以有null,js中对象的值中可以出现
    • json数据结束后,不允许出现没有意义的逗号,如:{"name":"admin","age":18,},注意看数据结尾部分18的后面的逗号,不允许出现

    五、总结

    所以,json数据的格式可以是:
    {"name":"admin","age":18}
    也可以是:
    ["hello",3.1415,"json"]
    还可以是:
    [{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]

    不能是:(key没有双引号)
    {"name":"admin",age:18}
    不能是:(无意义的逗号)
    {"name":"admin","age":18,}
    不能是:(不允许出现函数)
    {"name":"admin","age":18,"show":function()()}
    不能是:(不允许出现undefined)
    {"name":"admin","age":18,"show":undefined}
    不能是:(不允许出现NaN)
    {"name":"admin","age":18,"strong":NaN}
    不能是:(无意义的逗号)
    ["hello",3.1415,"json",]
    不能是:(无意义的逗号)
    [{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20},]

    以上内容,希望能对以后使用json有所帮助,简单来说json处理的是

    对象{},数值[ ] , 混合 {rows: [ ]}以及 json转换的注解

    其实作为通用数据,xml也是一种不错的选择,但是随着json的出现,xml的使用场景正慢慢被json蚕食,相对来说json在某些方面下的体现还是比xml稍具优势,后期可再开一篇文档说明json和xml的区别。

    六,使用json

    1导入pom.xml依赖

    1. <dependency>
    2. <groupId>com.fasterxml.jackson.core</groupId>
    3. <artifactId>jackson-databind</artifactId>
    4. <version>2.9.3</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.fasterxml.jackson.core</groupId>
    8. <artifactId>jackson-core</artifactId>
    9. <version>2.9.3</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>com.fasterxml.jackson.core</groupId>
    13. <artifactId>jackson-annotations</artifactId>
    14. <version>2.9.3</version>
    15. </dependency>

    2.配置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. <!--处理中文乱码以及避免IE执行AJAX时,返回JSON出现下载文件-->
    11. <property name="supportedMediaTypes">
    12. <list>
    13. <value>text/html;charset=UTF-8</value>
    14. <value>text/json;charset=UTF-8</value>
    15. <value>application/json;charset=UTF-8</value>
    16. </list>
    17. </property>
    18. </bean>

    3. @ResponseBody注解使用

    @ResponseBody注解的作用是将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

    注意:在使用此注解之后不会再走视图解析器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

     创建一个web层控制器
    1. package com.xzs.web;
    2. import com.xzs.Biz.ClazzBiz;
    3. import com.xzs.model.Clazz;
    4. import com.xzs.utils.PageBean;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Controller;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.ResponseBody;
    9. import javax.servlet.http.HttpServletRequest;
    10. import java.util.HashMap;
    11. import java.util.List;
    12. import java.util.Map;
    13. @Controller
    14. @RequestMapping("/clz/json")
    15. public class JsonController {
    16. @Autowired
    17. private ClazzBiz clazzBiz;
    18. /**
    19. * 返回List
    20. * @param req
    21. * @param clazz
    22. * @return
    23. */
    24. @ResponseBody
    25. @RequestMapping("/list")
    26. public List list(HttpServletRequest req, Clazz clazz){
    27. PageBean pageBean = new PageBean();
    28. pageBean.setRequest(req);
    29. List lst = this.clazzBiz.listPager(clazz, pageBean);
    30. return lst;
    31. }
    32. /**
    33. * 返回T
    34. * @param req
    35. * @param clazz
    36. * @return
    37. */
    38. @ResponseBody
    39. @RequestMapping("/load")
    40. public Clazz load(HttpServletRequest req, Clazz clazz){
    41. if(clazz.getCid() != null){
    42. List lst = this.clazzBiz.listPager(clazz, null);
    43. return lst.get(0);
    44. }
    45. return null;
    46. }
    47. /**
    48. * 返回List
    49. * @param req
    50. * @param clazz
    51. * @return
    52. */
    53. @ResponseBody
    54. @RequestMapping("/mapList")
    55. public List mapList(HttpServletRequest req, Clazz clazz){
    56. PageBean pageBean = new PageBean();
    57. pageBean.setRequest(req);
    58. List lst = this.clazzBiz.mapListPager(clazz, pageBean);
    59. return lst;
    60. }
    61. /**
    62. * 返回Map
    63. * @param req
    64. * @param clazz
    65. * @return
    66. */
    67. @ResponseBody
    68. @RequestMapping("/mapLoad")
    69. public Map mapLoad(HttpServletRequest req, Clazz clazz){
    70. if(clazz.getCid() != null){
    71. List lst = this.clazzBiz.mapListPager(clazz, null);
    72. return lst.get(0);
    73. }
    74. return null;
    75. }
    76. @ResponseBody
    77. @RequestMapping("/all")
    78. public Map all(HttpServletRequest req, Clazz clazz){
    79. PageBean pageBean = new PageBean();
    80. pageBean.setRequest(req);
    81. List lst = this.clazzBiz.listPager(clazz, pageBean);
    82. Map map = new HashMap();
    83. map.put("lst",lst);
    84. map.put("pageBean",pageBean);
    85. return map;
    86. }
    87. @ResponseBody
    88. @RequestMapping("/jsonStr")
    89. public String jsonStr(HttpServletRequest req, Clazz clazz){
    90. return "clzEdit";
    91. }
    92. }

    在ClazzMapper.xml中创建

    1. <select id="mapListPager" resultType="java.util.Map" parameterType="java.lang.Integer" >
    2. select
    3. <include refid="Base_Column_List" />
    4. from t_struts_class
    5. <where><if test="cname !=null">
    6. and cname like concat('%',#{cname},'%')
    7. </if></where>
    8. </select>

    注意!!!这里方法返回的是map值所以resultType中的属性值要填java.util.Map

     在ClazzMapper中实现该方法

    1. package com.xzs.mapper;
    2. import com.xzs.model.Clazz;
    3. import com.xzs.utils.PageBean;
    4. import java.util.List;
    5. import java.util.Map;
    6. public interface ClazzMapper {
    7. int deleteByPrimaryKey(Integer cid);
    8. int insert(Clazz record);
    9. int insertSelective(Clazz record);
    10. Clazz selectByPrimaryKey(Integer cid);
    11. int updateByPrimaryKeySelective(Clazz record);
    12. int updateByPrimaryKey(Clazz record);
    13. List listPger(Clazz clazz);
    14. List mapListPager(Clazz clazz);
    15. }
     编写ClazzBiz
    1. package com.xzs.Biz;
    2. import com.xzs.model.Clazz;
    3. import com.xzs.utils.PageBean;
    4. import org.springframework.stereotype.Repository;
    5. import java.util.List;
    6. import java.util.Map;
    7. @Repository
    8. public interface ClazzBiz {
    9. int deleteByPrimaryKey(Integer cid);
    10. int insert(Clazz record);
    11. int insertSelective(Clazz record);
    12. Clazz selectByPrimaryKey(Integer cid);
    13. int updateByPrimaryKeySelective(Clazz record);
    14. int updateByPrimaryKey(Clazz record);
    15. List listPager(Clazz clazz, PageBean page);
    16. List mapListPager(Clazz clazz, PageBean page);
    17. }
    实现接口
    1. package com.xzs.Impl;
    2. import com.xzs.Biz.ClazzBiz;
    3. import com.xzs.mapper.ClazzMapper;
    4. import com.xzs.model.Clazz;
    5. import com.xzs.utils.PageBean;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. import java.util.List;
    9. import java.util.Map;
    10. @Service
    11. public class ClazzBizImpl implements ClazzBiz {
    12. @Autowired
    13. private ClazzMapper clazzMapper;
    14. @Override
    15. public int deleteByPrimaryKey(Integer cid) {
    16. return clazzMapper.deleteByPrimaryKey(cid);
    17. }
    18. @Override
    19. public int insert(Clazz record) {
    20. return clazzMapper.insert(record);
    21. }
    22. @Override
    23. public int insertSelective(Clazz record) {
    24. return clazzMapper.insertSelective(record);
    25. }
    26. @Override
    27. public Clazz selectByPrimaryKey(Integer cid) {
    28. return clazzMapper.selectByPrimaryKey(cid);
    29. }
    30. @Override
    31. public int updateByPrimaryKeySelective(Clazz record) {
    32. return clazzMapper.updateByPrimaryKeySelective(record);
    33. }
    34. @Override
    35. public int updateByPrimaryKey(Clazz record) {
    36. return clazzMapper.updateByPrimaryKey(record);
    37. }
    38. @Override
    39. public List listPager(Clazz clazz, PageBean pageBean) {
    40. return clazzMapper.listPger(clazz);
    41. }
    42. @Override
    43. public List mapListPager(Clazz clazz, PageBean pageBean) {
    44. return clazzMapper.mapListPager(clazz);
    45. }
    46. }
    测试:

     public List list方法

    public Clazz load 方法

    public List mapList方法

    public Map mapLoad方法

    public Map all方法

     public String jsonStr方法

     注意:当我们的方法全部都是返SON对象时 @ResponseBody可以放在只写一个但是必须得是上述JsonController中@Controller的上方并且( @ResponseBody,@Controller)等于@RestController如果在JsonController中将 public String jsonStr方法上的@ResponseBody给注释掉那么将不再返回json数据而是进行页面跳转

     证明:

    1. import com.xzs.utils.PageBean;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import javax.servlet.http.HttpServletRequest;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. @Controller
    11. @RequestMapping("/clz/json")
    12. public class JsonController {
    13. @Autowired
    14. private ClazzBiz clazzBiz;
    15. /**
    16. * 返回List
    17. * @param req
    18. * @param clazz
    19. * @return
    20. */
    21. @ResponseBody
    22. @RequestMapping("/list")
    23. public List list(HttpServletRequest req, Clazz clazz){
    24. PageBean pageBean = new PageBean();
    25. pageBean.setRequest(req);
    26. List lst = this.clazzBiz.listPager(clazz, pageBean);
    27. return lst;
    28. }
    29. /**
    30. * 返回T
    31. * @param req
    32. * @param clazz
    33. * @return
    34. */
    35. @ResponseBody
    36. @RequestMapping("/load")
    37. public Clazz load(HttpServletRequest req, Clazz clazz){
    38. if(clazz.getCid() != null){
    39. List lst = this.clazzBiz.listPager(clazz, null);
    40. return lst.get(0);
    41. }
    42. return null;
    43. }
    44. /**
    45. * 返回List
    46. * @param req
    47. * @param clazz
    48. * @return
    49. */
    50. @ResponseBody
    51. @RequestMapping("/mapList")
    52. public List mapList(HttpServletRequest req, Clazz clazz){
    53. PageBean pageBean = new PageBean();
    54. pageBean.setRequest(req);
    55. List lst = this.clazzBiz.mapListPager(clazz, pageBean);
    56. return lst;
    57. }
    58. /**
    59. * 返回Map
    60. * @param req
    61. * @param clazz
    62. * @return
    63. */
    64. @ResponseBody
    65. @RequestMapping("/mapLoad")
    66. public Map mapLoad(HttpServletRequest req, Clazz clazz){
    67. if(clazz.getCid() != null){
    68. List lst = this.clazzBiz.mapListPager(clazz, null);
    69. return lst.get(0);
    70. }
    71. return null;
    72. }
    73. @ResponseBody
    74. @RequestMapping("/all")
    75. public Map all(HttpServletRequest req, Clazz clazz){
    76. PageBean pageBean = new PageBean();
    77. pageBean.setRequest(req);
    78. List lst = this.clazzBiz.listPager(clazz, pageBean);
    79. Map map = new HashMap();
    80. map.put("lst",lst);
    81. map.put("pageBean",pageBean);
    82. return map;
    83. }
    84. // @ResponseBody
    85. @RequestMapping("/jsonStr")
    86. public String jsonStr(HttpServletRequest req, Clazz clazz){
    87. return "clzEdit";
    88. }
    89. }

    1. package com.xzs.web;
    2. import com.xzs.Biz.ClazzBiz;
    3. import com.xzs.model.Clazz;
    4. import com.xzs.utils.PageBean;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Controller;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.ResponseBody;
    9. import javax.servlet.http.HttpServletRequest;
    10. import java.util.HashMap;
    11. import java.util.List;
    12. import java.util.Map;
    13. @ResponseBody
    14. @Controller
    15. @RequestMapping("/clz/json")
    16. public class JsonController {
    17. @Autowired
    18. private ClazzBiz clazzBiz;
    19. /**
    20. * 返回List
    21. * @param req
    22. * @param clazz
    23. * @return
    24. */
    25. // @ResponseBody
    26. @RequestMapping("/list")
    27. public List list(HttpServletRequest req, Clazz clazz){
    28. PageBean pageBean = new PageBean();
    29. pageBean.setRequest(req);
    30. List lst = this.clazzBiz.listPager(clazz, pageBean);
    31. return lst;
    32. }
    33. /**
    34. * 返回T
    35. * @param req
    36. * @param clazz
    37. * @return
    38. */
    39. // @ResponseBody
    40. @RequestMapping("/load")
    41. public Clazz load(HttpServletRequest req, Clazz clazz){
    42. if(clazz.getCid() != null){
    43. List lst = this.clazzBiz.listPager(clazz, null);
    44. return lst.get(0);
    45. }
    46. return null;
    47. }
    48. /**
    49. * 返回List
    50. * @param req
    51. * @param clazz
    52. * @return
    53. */
    54. // @ResponseBody
    55. @RequestMapping("/mapList")
    56. public List mapList(HttpServletRequest req, Clazz clazz){
    57. PageBean pageBean = new PageBean();
    58. pageBean.setRequest(req);
    59. List lst = this.clazzBiz.mapListPager(clazz, pageBean);
    60. return lst;
    61. }
    62. /**
    63. * 返回Map
    64. * @param req
    65. * @param clazz
    66. * @return
    67. */
    68. @ResponseBody
    69. @RequestMapping("/mapLoad")
    70. public Map mapLoad(HttpServletRequest req, Clazz clazz){
    71. if(clazz.getCid() != null){
    72. List lst = this.clazzBiz.mapListPager(clazz, null);
    73. return lst.get(0);
    74. }
    75. return null;
    76. }
    77. @ResponseBody
    78. @RequestMapping("/all")
    79. public Map all(HttpServletRequest req, Clazz clazz){
    80. PageBean pageBean = new PageBean();
    81. pageBean.setRequest(req);
    82. List lst = this.clazzBiz.listPager(clazz, pageBean);
    83. Map map = new HashMap();
    84. map.put("lst",lst);
    85. map.put("pageBean",pageBean);
    86. return map;
    87. }
    88. // @ResponseBody
    89. @RequestMapping("/jsonStr")
    90. public String jsonStr(HttpServletRequest req, Clazz clazz){
    91. return "clzEdit";
    92. }
    93. }

     

     隐藏数据

    在实体类中在要隐藏的属性上添加@JsonIgnore即可

    1. package com.xzs.model;
    2. import com.fasterxml.jackson.annotation.JsonIgnore;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. import org.hibernate.validator.constraints.NotBlank;
    7. import javax.validation.constraints.NotNull;
    8. @Data//相当于set get toString方法
    9. @AllArgsConstructor //有参构造器
    10. @NoArgsConstructor
    11. public class Clazz {
    12. @NotNull(message = "班级编号不能为空")
    13. // @Size(max = 100,min = 10,message = "大小必须在10至100之间")
    14. protected Integer cid;
    15. @NotBlank(message = "班级名不能为空")
    16. protected String cname;
    17. @NotBlank(message = "班级教员老师不能为空")
    18. protected String cteacher;
    19. @JsonIgnore
    20. private String pic="暂无图片";
    21. }

    2.异常处理机制

    1.为什么要全局异常处理?

    我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是dao层、service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。

    2.异常处理思路

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

    3.SpringMVC异常分类

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

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

    • 使用@ControllerAdvice + @ExceptionHandler

    4.异常处理方法

    1. @RequestMapping("/mapList")
    2. public List mapList(HttpServletRequest req, Clazz clazz){
    3. System.out.println((1 / 0));
    4. PageBean pageBean = new PageBean();
    5. pageBean.setRequest(req);
    6. List lst = this.clazzBiz.mapListPager(clazz, pageBean);
    7. return lst;
    8. }

     方法一

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

    编写错误界面error.jsp

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: xzs
    4. Date: 2023/9/13
    5. Time: 16:48
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Titletitle>
    12. head>
    13. <body>
    14. 网络异常
    15. body>
    16. html>

    方法二

    1. package com.xzs.exception;
    2. public class GlobalException extends RuntimeException {
    3. public GlobalException() {
    4. }
    5. public GlobalException(String message) {
    6. super(message);
    7. }
    8. public GlobalException(String message, Throwable cause) {
    9. super(message, cause);
    10. }
    11. public GlobalException(Throwable cause) {
    12. super(cause);
    13. }
    14. public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    15. super(message, cause, enableSuppression, writableStackTrace);
    16. }
    17. }

    1. package com.xzs.component;
    2. import com.xzs.exception.GlobalException;
    3. import org.springframework.stereotype.Component;
    4. import org.springframework.web.servlet.HandlerExceptionResolver;
    5. import org.springframework.web.servlet.ModelAndView;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. @Component
    9. public class GlobalExceptionHandler implements HandlerExceptionResolver {
    10. @Override
    11. public ModelAndView resolveException(HttpServletRequest httpServletRequest,
    12. HttpServletResponse httpServletResponse,
    13. Object o, Exception e) {
    14. ModelAndView mv = new ModelAndView();
    15. mv.setViewName("error");
    16. if (e instanceof GlobalException){
    17. GlobalException globalException = (GlobalException) e;
    18. mv.addObject("ex",globalException.getMessage());
    19. mv.addObject("msg","全局异常....");
    20. }else if (e instanceof RuntimeException){
    21. RuntimeException runtimeException = (RuntimeException) e;
    22. mv.addObject("ex",runtimeException.getMessage());
    23. mv.addObject("msg","运行时异常....");
    24. }else {
    25. RuntimeException runtimeException = (RuntimeException) e;
    26. mv.addObject("ex",runtimeException.getMessage());
    27. mv.addObject("msg","其他时异常....");
    28. }
    29. return mv;
    30. }
    31. }

    编写错误界面

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: xzs
    4. Date: 2023/9/13
    5. Time: 16:48
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Titletitle>
    12. head>
    13. <body>
    14. 网络异常
    15. ${msg}
    16. body>
    17. html>

     运行结果

     方法三

    1. package com.xzs.component;
    2. import com.xzs.exception.GlobalException;
    3. import org.springframework.web.bind.annotation.ControllerAdvice;
    4. import org.springframework.web.bind.annotation.ExceptionHandler;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import java.util.HashMap;
    7. import java.util.Map;
    8. @ControllerAdvice
    9. public class GlobalExceptionResolver {
    10. // 跳转错误页面
    11. // @ExceptionHandler
    12. // public ModelAndView handler(Exception e){
    13. // ModelAndView mv = new ModelAndView();
    14. // mv.setViewName("error");
    15. // if (e instanceof GlobalException){
    16. // GlobalException globalException = (GlobalException) e;
    17. // mv.addObject("ex",globalException.getMessage());
    18. // mv.addObject("msg","全局异常....");
    19. // }else if (e instanceof RuntimeException){
    20. // RuntimeException runtimeException = (RuntimeException) e;
    21. // mv.addObject("ex",runtimeException.getMessage());
    22. // mv.addObject("msg","运行时异常....");
    23. // }
    24. // return mv;
    25. // }
    26. // 返回错误json数据
    27. @ResponseBody
    28. @ExceptionHandler
    29. public Map handler(Exception e){
    30. Map map = new HashMap();
    31. if (e instanceof GlobalException){
    32. GlobalException globalException = (GlobalException) e;
    33. map.put("ex",globalException.getMessage());
    34. map.put("msg","全局异常....");
    35. }else if (e instanceof RuntimeException){
    36. RuntimeException runtimeException = (RuntimeException) e;
    37. map.put("ex",runtimeException.getMessage());
    38. map.put("msg","运行时异常....");
    39. }else {
    40. map.put("ex",e.getMessage());
    41. map.put("msg","其它异常....");
    42. }
    43. return map;
    44. }
    45. }

     返回json数据

    1. package com.xzs.component;
    2. import com.xzs.exception.GlobalException;
    3. import org.springframework.web.bind.annotation.ControllerAdvice;
    4. import org.springframework.web.bind.annotation.ExceptionHandler;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import org.springframework.web.servlet.ModelAndView;
    7. import java.util.HashMap;
    8. import java.util.Map;
    9. @ControllerAdvice
    10. public class GlobalExceptionResolver {
    11. //跳转错误页面
    12. @ExceptionHandler
    13. public ModelAndView handler(Exception e){
    14. ModelAndView mv = new ModelAndView();
    15. mv.setViewName("error");
    16. if (e instanceof GlobalException){
    17. GlobalException globalException = (GlobalException) e;
    18. mv.addObject("ex",globalException.getMessage());
    19. mv.addObject("msg","全局异常....");
    20. }else if (e instanceof RuntimeException){
    21. RuntimeException runtimeException = (RuntimeException) e;
    22. mv.addObject("ex",runtimeException.getMessage());
    23. mv.addObject("msg","运行时异常....");
    24. }
    25. return mv;
    26. }
    27. // 返回错误json数据
    28. // @ResponseBody
    29. // @ExceptionHandler
    30. // public Map handler(Exception e){
    31. // Map map = new HashMap();
    32. // if (e instanceof GlobalException){
    33. // GlobalException globalException = (GlobalException) e;
    34. // map.put("ex",globalException.getMessage());
    35. // map.put("msg","全局异常....");
    36. // }else if (e instanceof RuntimeException){
    37. // RuntimeException runtimeException = (RuntimeException) e;
    38. // map.put("ex",runtimeException.getMessage());
    39. // map.put("msg","运行时异常....");
    40. // }else {
    41. // map.put("ex",e.getMessage());
    42. // map.put("msg","其它异常....");
    43. // }
    44. // return map;
    45. // }
    46. }

     

  • 相关阅读:
    2022 百度之星程序设计大赛复赛 D.子序列2(动态dp/线段树维护矩阵)
    使用 Learner Lab - 使用 AWS Lambda 将图片写入 S3
    C++的deque(双端队列),priority_queue(优先级队列)
    Java简单使用EasyExcel操作读写excel
    系统日志记录的最佳实践
    【狂神说】CSS3详解
    Vue---v-for渲染和样式绑定
    InternImage的DCNv3编译
    2022-08-27 第五组 张明敏 学习笔记
    时间序列中的6大类10种异常值处理方法(从根源上提高预测精度)
  • 原文地址:https://blog.csdn.net/weixin_72997875/article/details/132852336