目录

一、SpringMVC对JSON的支持

二、SpringMVC 的全局异常处理


一、SpringMVC对JSON的支持

①JSON数据的格式分类:

json的形式

  1. {}->json对象   :T  Map

  2. []->json数组   :list<T> list<Map>

  3. {mag:"",code:200,data:[] }->json混合对象

②SpringMvc框架如何进行这三种json格式数据传递?

2.1导入pom依赖

 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.3</version>
</dependency>

2.2  在Springmvc框架配置文件中配置做json数据转换的适配器

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><ref bean="mappingJackson2HttpMessageConverter"/></list></property></bean><bean id="mappingJackson2HttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><!--处理中文乱码以及避免IE执行AJAX时,返回JSON出现下载文件--><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>text/json;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property>
</bean>

2.3在控制层中添加注释

在这里说明:

项目中如果这个控制类返回json格式数据与跳转页面同时存在,就在返回json格式的方法上添加responseBody注解,在类上添加controller注释;

而如果这个控制类只需要返回JSON格式数据的话就在就直接在类上面添加restController注释(responseBody+controller = restController)

2.4 编码实现JSON数据传递

2.4.1后台编码:

package com.zq.ssm.controller;import com.zq.ssm.biz.ClazzBiz;
import com.zq.ssm.model.Clazz;
import com.zq.ssm.util.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author张强* @site www.zq.com* @create  2022-08-24 8:57*/
@RestController
@RequestMapping("/clz/json")
public class JSONController {@Autowiredprivate  ClazzBiz clazzBiz;//返回map@RequestMapping("/Map")public Map map(HttpServletRequest Request , Clazz clazz){PageBean pageBean = new PageBean();pageBean.setRequest(Request);//返回[{},{}]return this.clazzBiz.listMapPager(clazz,pageBean).get(0);}//返回T@RequestMapping("/Clazz")public Clazz clazz(HttpServletRequest Request , Clazz clazz){PageBean pageBean = new PageBean();pageBean.setRequest(Request);//返回[{},{}]return this.clazzBiz.listPager(clazz,pageBean).get(0);}//返回list<T>@RequestMapping("/list")public List<Clazz> list(HttpServletRequest Request , Clazz clazz){PageBean pageBean = new PageBean();pageBean.setRequest(Request);//返回[{},{}]return this.clazzBiz.listPager(clazz,pageBean);}//返回list<map>@RequestMapping("/listMap")public List<Map> listMap(HttpServletRequest Request , Clazz clazz){PageBean pageBean = new PageBean();pageBean.setRequest(Request);//返回[{},{}]return this.clazzBiz.listMapPager(clazz,pageBean);}//返回对象数组@RequestMapping("/hunhe")public Map hunhe(HttpServletRequest Request , Clazz clazz){PageBean pageBean = new PageBean();pageBean.setRequest(Request);//返回[{},{}]List<Clazz> list = this.clazzBiz.listPager(clazz,pageBean);Map map = new HashMap();map.put("list",list);map.put("pageBean",pageBean);return map;}}

2.4.2前台编码:

<%--Created by IntelliJ IDEA.User: zjjtDate: 2022/8/22Time: 18:47To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>测试json数据</title>
</head>
<body><a href="${pageContext.request.contextPath}/clz/json/list">返回List&lt;T&gt;</a><hr>
<a href="${pageContext.request.contextPath}/clz/json/listMap">返回List&lt;Map&gt;</a><hr>
<a href="${pageContext.request.contextPath}/clz/json/Clazz?cid=1">返回T</a><hr>
<a href="${pageContext.request.contextPath}/clz/json/Map?cid=1">返回Map</a><hr>
<a href="${pageContext.request.contextPath}/clz/json/hunhe">返回混合</a><hr>
</body>
</html>

2.4.3效果实现:


二、SpringMVC 的全局异常处理

①为什么要全局处理异常

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

②异常处理思路

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

③SpringMVC异常分类

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

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

3)使用@ControllerAdvice + @ExceptionHandler

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

4.1在Springmvc框架配置文件中配置处理器

<!-- springmvc提供的简单异常处理器 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><!-- 定义默认的异常处理页面 --><property name="defaultErrorView" value="error"/><!-- 定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception --><property name="exceptionAttribute" value="ex"/><!-- 定义需要特殊处理的异常,这是重要点 --><property name="exceptionMappings"><props><prop key="java.lang.RuntimeException">error</prop></props><!-- 还可以定义其他的自定义异常 --></property></bean>

4.2添加error界面,以及绑定传递的错误信息

error.jsp:(根据配置文件的参数觉得错误界面名以及参数名)

<%--Created by IntelliJ IDEA.User: zjjtDate: 2022/8/24Time: 10:21To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>出错啦!</title>
</head>
<body>
${ex}
</body>
</html>

4.3效果展示:

通过HandlerExceptionResovler接口实现全局异常

5.1首先我们想要用第二种方式处理异常的话就先注释掉我们刚刚在配置文件中添加的第一种配置处理器

5.2建立一个全局异常处理类并实现运行异常类

package com.zq.ssm.exception;/*** @author张强* @site www.zq.com* @create  2022-08-24 10:35*/
public class GlobalException extends RuntimeException {public GlobalException() {}public GlobalException(String message) {super(message);}public GlobalException(String message, Throwable cause) {super(message, cause);}public GlobalException(Throwable cause) {super(cause);}public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

5.3建立异常处理器 实现HandlerExceptionResovler接口

在这里我们要注意的就是方法中的业务步骤!

package com.zq.ssm.exception;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author张强* @site www.zq.com* @create  2022-08-24 10:36*/
@Component
public class GlobalExceptionHandler implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView mv = new ModelAndView();mv.setViewName("error");if (e instanceof GlobalException){GlobalException globalException = (GlobalException) e;mv.addObject("ex",globalException.getMessage());mv.addObject("msg","全局异常....");}else if (e instanceof RuntimeException){RuntimeException runtimeException = (RuntimeException) e;mv.addObject("ex",runtimeException.getMessage());mv.addObject("msg","运行时异常....");}return mv;}
}

5.4业务显示

我们在控制层中抛出一个全局异常:

然后当我们在前台点击调用这个方法时,则会用第二种方法抛出处理异常:

使用@ControllerAdvice+@ExceptionHandler实现全局异常

所谓的第三种方式处理异常,其实就是第二种的简便方式,不用实现父类而已而是通过注释的方式处理,业务代码还是一样的:

package com.zq.ssm.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;/*** @author张强* @site www.zq.com* @create  2022-08-24 10:54*/
@ControllerAdvice
public class GlobalExceptionResolver {@ExceptionHandlerpublic ModelAndView handler(Exception e) {ModelAndView mv = new ModelAndView();mv.setViewName("error");if (e instanceof GlobalException) {GlobalException globalException = (GlobalException) e;mv.addObject("ex", globalException.getMessage());mv.addObject("msg", "全局异常....");} else if (e instanceof RuntimeException) {RuntimeException runtimeException = (RuntimeException) e;mv.addObject("ex", runtimeException.getMessage());mv.addObject("msg", "运行时异常....");}return mv;}
}

⑦全局异常处理JSON返回

在上述的三中方式中,都是通过跳转页面的方式,但是在项目开发中还是通过JSON数据传递的方式才行,所以我们再次修改一下我们的异常处理,把它编译为JSON数据传递的方式:

@RestControllerAdvice
public class GlobalExceptionJsonResolver {@ExceptionHandlerpublic Map handler(Exception e){Map map = new HashMap();if (e instanceof GlobalException){GlobalException globalException = (GlobalException) e;map.put("ex",globalException.getMessage());map.put("msg","全局异常....");}else if (e instanceof RuntimeException){RuntimeException runtimeException = (RuntimeException) e;map.put("ex",runtimeException.getMessage());map.put("msg","运行时异常....");}return map;}
}

快速上手JSON数据传递异常处理相关推荐

  1. json转excel_如何快速把json数据转到excel表格,方便个人查看

    如何快速把json数据转到excel表格,方便个人查看 json数据格式并不是人人都能看明白,密密麻麻的代码不是专业人士看起来肯定很费劲, 办公人士一般都是看excel这样的整理好的数据, 但是偶尔会 ...

  2. 程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 https://bbs.csdn.net/topics/60395 ...

  3. Java中使用JSON数据传递

    一.Java中使用JSON数据传递 pom依赖引入 <dependency><groupId>com.alibaba</groupId><artifactId ...

  4. js json数据传递传递、json数据解析

    在js 中,前台数据传递到后台,需要使用JSON.stringify()传递 wx.navigateTo({url:'../textcontent/textcontent?arraylist2=' + ...

  5. 快速编写json数据

    1.打开idea 2.新建txt文件,alt+单击快速加"",编写json数据

  6. python上手度_Python快速上手JSON指南

    什么是JSON? 网上对JSON有很多教程,有各种各样的解释.一言以蔽之,JSON本质上是一种语法,这种语法的作用是把数据以字符串的形式存储.传递,多用于Web编程. JSON的典型示例 '{&quo ...

  7. android 快速解析json数据搭配Gson库中Android Studio插件 GsonFormat

    转:https://www.jianshu.com/p/d34c5e7c8227 更简洁的文章:http://www.cnblogs.com/foxy/p/7825380.html 如果对json解析 ...

  8. Rxjava、Retrofit返回json数据解析异常处理

    每个App都避免不了要进行网络请求,从最开始的用谷歌封装的volley到再到android-async-http再到OKHttpUtils再到现在的Retrofit和RxJava,从我自己用后的体验来 ...

  9. ajax如何传递josn数据,jq之ajax以及json数据传递

    闭包演示 function transfer(){ var dat = $( "#sel" ).val(); //console.log(dat) $.ajax({ type:&q ...

最新文章

  1. GEMM与AutoKernel算子优化
  2. Nuaa Q1090
  3. mysql修改用户密码
  4. 详解面向对象、构造函数、原型与原型链
  5. 阿里云应用实战-IoT工业数据上云优化实践
  6. react.lazy 路由懒加载_Vue面试题: 如何实现路由懒加载?
  7. 谁说格力不做手机了?格力折叠屏手机了解一下
  8. sql查询前50条_您必须知道的前50条SQL查询
  9. JSONObject.toBean方法复制不成功
  10. 在线端口检测 - 端口扫描 - 端口开放检查
  11. 德州农工大学计算机专业研究生,德州农工大学计算机工程(无论文)理学硕士研究生申请要求及申请材料要求清单...
  12. virt与virsh常用命令
  13. 检查xml格式是否正确
  14. elasticsearch-analysis-ik中文分词插件安装及配置Ik自定义词典+拼音分词
  15. 程序员副业之如何利用空余时间从博客中赚钱?
  16. SkyWalking之告警
  17. oracle 12c基本管理,oracle 基本管理
  18. KISSY基础篇乄KISSY之Event
  19. python 英语翻译_python中英文翻译
  20. 计算机图像处理数据 流行病学,漫谈计算机图像处理在全息学中的应用.docx

热门文章

  1. 开关电源EMC过不了?PCB画板工程师有不可推卸的责任!
  2. 【推荐】WINRAR 4.10 Final 简体中文特别版
  3. python 语音朗读软件下载_使用python编写一个语音朗读闹钟功能的示例代码
  4. [Errno 98] Address already in use
  5. 猎头、培训与咨询的价值(2)【补1】——北漂18年(93)
  6. 市场上主流计算机语言的第一个程序
  7. office2010安装问题收录及解决办法
  8. winhex脚本命令(中文版)
  9. 【jinja2】Python根据模板生成HTML文件并加载进QWebEngineView
  10. 使用Git命令行推送代码到远程仓库,阿里云效Codeup代码管理平台