镇江市机关效能与作风建设网站,开发一款游戏能赚多少钱,上海做个网站多少钱,赚钱做任务的网站有哪些目录 一.SpringMVC的JSON数据返回
1.导入Maven依赖
2.配置spring-mvc.xml
3.ResponseBody注解的使用
3.1案例演示
1.List集合转JSON 2.Map集合转JSON 3.返回指定格式String
4. ResponseBody用法 5.Jackson
5.1介绍
5.2常用注解
二.异常处理机制
1.为什么要全局异常处…目录 一.SpringMVC的JSON数据返回
1.导入Maven依赖
2.配置spring-mvc.xml
3.ResponseBody注解的使用
3.1案例演示
1.List集合转JSON 2.Map集合转JSON 3.返回指定格式String
4. ResponseBody用法 5.Jackson
5.1介绍
5.2常用注解
二.异常处理机制
1.为什么要全局异常处理
2.异常处理思路
3.SpringMVC异常分类
4.案例演示
4.1 异常处理方式一配置springmvc提供的简单异常处理器 4.2 异常处理方式二全局异常处理,通过实现HandlerExceptionResolver异常处理解析器完成异常处理
1首先在异常包中定义一个全局异常类
(2) 定义一个全局异常处理的类 4.3 异常处理方式三通过注解的方式将异常信息直接以JSON的格式回显到前端 一.SpringMVC的JSON数据返回
1.导入Maven依赖
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.3/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.9.3/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.9.3/version
/dependency
2.配置spring-mvc.xml
bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namemessageConverterslistref beanmappingJackson2HttpMessageConverter//list/property
/bean
bean idmappingJackson2HttpMessageConverter
classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter!--处理中文乱码以及避免IE执行AJAX时返回JSON出现下载文件--property namesupportedMediaTypeslistvaluetext/html;charsetUTF-8/valuevaluetext/json;charsetUTF-8/valuevalueapplication/json;charsetUTF-8/value/list/property
/bean
3.ResponseBody注解的使用
ResponseBody注解的作用
用于标记控制器方法的返回值应该作为 HTTP 响应的主体部分返回而不是通过视图解析器进行渲染。
当使用 Spring MVC 框架时控制器方法通常会返回某种类型的数据例如对象、集合、字符串等然后由视图解析器将该数据绑定到视图模板并生成最终的 HTML 或其他格式的响应。然而有时候我们希望直接返回数据而不经过视图解析器的处理将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后写入到response对象的body区通常用来返回JSON数据或者是XML数据。
在这种情况下我们可以使用 ResponseBody 注解来标记控制器方法。当该注解应用于方法时Spring MVC 框架会将方法的返回值封装为适当的格式例如 JSON并将其作为 HTTP 响应的主体部分返回给客户端。这样可以方便地实现 RESTful API 服务将数据直接以特定格式响应给调用端。 注意在使用此注解之后不会再走视图解析器而是直接将数据写入到输入流中他的效果等同于通过response对象输出指定格式的数据。 3.1案例演示
1.List集合转JSON
这里我们定义一个返回List集合的方法最终到Controller层中标注ResponseBody注解将集合数据转换成JSON数据
/*** 返回ListT* param req* param hBook* return*/ResponseBodyRequestMapping(/list)public ListHBook list(HttpServletRequest req, HBook hBook){PageBean pageBean new PageBean();pageBean.setRequest(req);ListHBook lst this.hBookbiz.listPager(hBook, pageBean);return lst;}
测试结果 2.Map集合转JSON
我们定义一个返回Map集合的方法通过Controller中注解ResponseBody返回JSON格式数据
/*** 返回ListMap* param req* param hBook* return*/ResponseBodyRequestMapping(/mapList)public ListMap mapList(HttpServletRequest req, HBook hBook){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMap lst this.hBookbiz.mapListPager(hBook, pageBean);return lst;}
测试结果 3.返回指定格式String
ResponseBodyRequestMapping(/jsonStr)public String jsonStr(HttpServletRequest req, HBook hBook){return bookEdit;}
测试结果 4. ResponseBody用法
在整个Controller类中可将注解定义在类对象上面这样整个类中的方法都使用了注解ResponseBody 小结由上面的案例得知我们将对象、集合、字符串等类型数据通过Controller的方法返回的对象通过适当的转换器转换为指定的格式之后写入到response对象的body区通常用来返回JSON数据或者是XML数据。 5.Jackson
5.1介绍
Jackson是一个简单基于Java应用库Jackson可以轻松的将Java对象转换成json对象和xml文档同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少简单易用并且性能也要相对高些并且Jackson社区相对比较活跃更新速度也比较快。
特点 容易使用提供了高层次外观简化常用的用例。 无需创建映射API提供了默认的映射大部分对象序列化。 性能高快速低内存占用 创建干净的json 不依赖其他库 代码开源
5.2常用注解
注解说明JsonIgnore作用在字段或方法上用来完全忽略被注解的字段和方法对应的属性JsonProperty作用在字段或方法上用来对属性的序列化/反序列化可以用来避免遗漏属性同时提供对属性名称重命名JsonIgnoreProperties作用在类上用来说明有些属性在序列化/反序列化时需要忽略掉JsonUnwrapped作用在属性字段或方法上用来将子JSON对象的属性添加到封闭的JSON对象JsonFormat指定序列化日期/时间值时的格式 二.异常处理机制
1.为什么要全局异常处理
我们知道系统中异常包括编译时异常和运行时异常RuntimeException前者通过捕获异常从而获取异常信息后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中不管是dao层、service层还是controller层都有可能抛出异常在springmvc中能将所有类型的异常处理从各处理过程解耦出来既保证了相关处理过程的功能较单一也实现了异常信息的统一处理和维护。
2.异常处理思路
系统的dao、service、controller出现异常都通过throws Exception向上抛出最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器一个系统只有一个异常处理器进行统一异常处理。 3.SpringMVC异常分类 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver 实现Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器 使用ControllerAdvice ExceptionHandler
4.案例演示
4.1 异常处理方式一配置springmvc提供的简单异常处理器
!-- springmvc提供的简单异常处理器 --bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver!-- 定义默认的异常处理页面 --property namedefaultErrorView valueerror/!-- 定义异常处理页面用来获取异常信息的变量名也可不定义默认名为exception --property nameexceptionAttribute valueex/!-- 定义需要特殊处理的异常这是重要点 --property nameexceptionMappingspropsprop keyjava.lang.RuntimeExceptionerror/prop/props!-- 还可以定义其他的自定义异常 --/property/bean error 获取定义的异常处理的页面 ex存储异常处理的异常信息
我们在controller层造出一个异常在前端页面打印异常信息并显示前端页面
ResponseBodyRequestMapping(/mapList)public ListMap mapList(HttpServletRequest req, HBook hBook){PageBean pageBean new PageBean();pageBean.setRequest(req);ListMap lst this.hBookbiz.mapListPager(hBook, pageBean);System.out.println(1/0);return lst;}
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
错误信息页面
hr
${ex}
hr
${msg}
/body
/html
测试结果 4.2 异常处理方式二全局异常处理,通过实现HandlerExceptionResolver异常处理解析器完成异常处理 1首先在异常包中定义一个全局异常类 package com.YU.exception;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);}
}
(2) 定义一个全局异常处理的类
它通过实现了HandlerExceptionResolver接口同时使用了Component注解以被Spring框架管理和注册为一个组件。
这个异常处理器的主要作用是在Spring MVC应用程序中捕获并处理全局异常。当一个Controller方法抛出异常时Spring MVC会将异常传递给注册的异常处理器来处理该异常,并跳转异常页面通过判断异常类型然后携带不同的异常信息传递到前端页面展示
package com.YU.component;import com.YU.exception.GlobalException;
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;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,运行时异常....);}else{mv.addObject(ex,e.getMessage());mv.addObject(msg,其他异常....);}return mv;}
}
通过这种方式你可以统一处理全局的异常情况并在异常发生时返回指定的错误视图并且还可以根据不同的异常类型提供不同的错误信息以便更好地提供错误处理和用户体验
测试结果 注意前面两种异常处理不可同时使用不然第二种会被覆盖并不产生效果 4.3 异常处理方式三通过注解的方式将异常信息直接以JSON的格式回显到前端
与前面两种不同的是方式三使用注解ResponseBody 和ExceptionHandler通过判断异常类型将异常信息传递到map集合进行保存并将其转换成JSON格式的数据传输到前端展示
ControllerAdvice
public class GlobalExceptionHandler{ResponseBodyExceptionHandlerpublic 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,运行时异常....);}else {map.put(ex,e.getMessage());map.put(msg,其它异常....);}return map;}
}
测试结果 总结 在SpringMVC中三种方法的使用的优先级依次降低但是在实际开发过程中第三种应用范围最广也就是我们最常用的类型当然JSON只是传递在后端进行判断所用前端最后展现给客户页面需要我们自己根据逻辑判断异常信息最终展示不同的前端页面 今天的学习到这里就结束了感谢各位大大的观看各位大大的三连是博主更新的动力感谢谢谢谢谢谢谢谢谢各位的支持