延安市住建建设网站,广州模板建站平台,购物网站模板下载,seo排名助手文章目录 一、Jackson1.1 Jackson是什么1.2 常用注解1.3 实例1.3.1导入依赖1.3.2 配置spring-mvc.xml1.3.3 JsonController.java 二、Spring MVC异常处理机制2.1 使用原因2.2 SpringMVC异常处理2.2.1 异常处理机制流程图2.2.2 异常处理的三种方式 一、Jackson
1.1 Jackson是什… 文章目录 一、Jackson1.1 Jackson是什么1.2 常用注解1.3 实例1.3.1导入依赖1.3.2 配置spring-mvc.xml1.3.3 JsonController.java 二、Spring MVC异常处理机制2.1 使用原因2.2 SpringMVC异常处理2.2.1 异常处理机制流程图2.2.2 异常处理的三种方式 一、Jackson
1.1 Jackson是什么
在Java中Jackson是一个流行的开源库用于处理JSON数据。它提供了一组功能强大的API可以将Java对象序列化为JSON格式或将JSON数据反序列化为Java对象。Jackson库提供了灵活的方式来处理JSON数据包括读取、写入、转换和操作JSON对象。它是Java开发人员在处理JSON数据时的常用工具之一。
1.2 常用注解
Jackson库提供了一些常用的注解用于在Java对象和JSON数据之间进行序列化和反序列化的映射。以下是一些常用的Jackson注解
JsonProperty用于指定Java对象属性与JSON字段之间的映射关系JsonFormat用于指定日期、时间等特殊类型属性的格式化方式。JsonIgnore用于忽略某个属性不进行序列化和反序列化。 JsonInclude用于控制在序列化过程中是否包含某个属性。JsonAlias用于指定多个JSON字段名与Java对象属性之间的映射关系。JsonCreator用于指定一个静态工厂方法或构造函数用于反序列化JSON数据。JsonAnyGetter和JsonAnySetter用于处理动态属性允许将未映射到Java对象属性的JSON字段读取和写入。
1.3 实例
1.3.1导入依赖
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 1.3.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
/bean1.3.3 JsonController.java
RequestMapping(/queryListBooks)ResponseBodypublic ListBook queryListBooks(Book book,HttpServletRequest request){PageBean pageBeannew PageBean();pageBean.setRequest(request);ListBook books bookService.queryBookPager(book, pageBean);return books;};
RequestMapping(/querySingleBook)ResponseBodypublic Book querySingleBook(Integer bookId){Book book bookService.selectByPrimaryKey(bookId);book.setDate(new Date());return book;}RequestMapping(/querySingleMap)ResponseBodypublic MapString, Object querySingleMap(Integer bookId){return bookService.querySingleMap(bookId);}
RequestMapping(/queryMapList)ResponseBodypublic ListMapString, Object queryMapList( ){return bookService.queryBookAll();}
RequestMapping(/queryString)ResponseBodypublic String queryString(){return book/bookList;}二、Spring MVC异常处理机制
2.1 使用原因
我们知道系统中异常包括编译时异常和运行时异常RuntimeException前者通过捕获异常从而获取异常信息后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中不管是(dao/mapper)层、service层还是controller层都有可能抛出异常。
而在Spring MVC中提供了一个通用的异常处理机制它提供了一个成熟、简洁并且清晰的异常处理方案。当使用Spring MVC开发Web应用时利用这套现成的机制进行异常处理也更加自然并且高效。
2.2 SpringMVC异常处理
2.2.1 异常处理机制流程图
系统的Dao(mapper)、Service、Controller出现都通过throws Exception向上抛出最后SpringMVC前端控制器交由异常处理器进行异常处理如下图
2.2.2 异常处理的三种方式
1. 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
SpringMVC中自带了一个异常处理器叫SimpleMappingExceptionResolver该处理器实现了HandlerExceptionResolver 接口全局异常处理器都需要实现该接口
1配置SpringMVC的简单的异常处理器
bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver!-- 定义默认的异常处理页面 --property namedefaultErrorView valueerror/!-- 定义异常处理页面用来获取异常信息的变量名也可不定义默认名为exception -- property nameexceptionAttribute valueex/!-- 定义需要特殊处理的异常这是重要点 -- property nameexceptionMappingsprops !--异常类型 错误视图-- prop keyjava.lang.RuntimeExceptionerror/prop/props!-- 还可以定义其他的自定义异常 --/property/bean 2方法中抛出此异常
RequestMapping(/querySingleBook)ResponseBodypublic Book querySingleBook(Integer bookId){Book book bookService.selectByPrimaryKey(bookId);if(bookId100)throw new RuntimeException(书本编号大于100,异常抛出);book.setDate(new Date());return book;}2. 实现Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器 (1) 实现HandlerExceptionResolver接口
package com.xqx.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;/*** SpingMVC提供的第二种全局异常处理方式 ,实现HandlerExceptionResolver接口*/
Component
public class GlobalException implements HandlerExceptionResolver {/**** param httpServletRequest* param httpServletResponse* param o 异常处理的目标* param e 异常处理的类型* return*/Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView mvnew ModelAndView();mv.setViewName(error);//判断异常的分类if(e instanceof RuntimeException){RuntimeException ex(RuntimeException)e;System.out.println(ex.getMessage());mv.addObject(msg,ex.getMessage());}return mv;}
}2创建异常类
package com.xqx.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;/*** SpingMVC提供的第二种全局异常处理方式 ,实现HandlerExceptionResolver接口*/
Component
public class GlobalException implements HandlerExceptionResolver {/**** param httpServletRequest* param httpServletResponse* param o 异常处理的目标* param e 异常处理的类型* return*/Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView mvnew ModelAndView();mv.setViewName(error);//判断异常的分类if(e instanceof RuntimeException){RuntimeException ex(RuntimeException)e;System.out.println(ex.getMessage());mv.addObject(msg,ex.getMessage());}return mv;}
}3方法中抛出此异常
RequestMapping(/querySingleBook)ResponseBodypublic Book querySingleBook(Integer bookId){Book book bookService.selectByPrimaryKey(bookId);if(bookId100)throw new BusinessException(书本编号大于100,异常抛出);book.setDate(new Date());return book;}3. 使用ControllerAdvice ExceptionHandler
1
package com.xqx.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;import java.util.HashMap;
import java.util.Map;/*** SpingMVC提供的第三种种全局异常处理方式* 1ControllerAdvice ExceptionHandler* 2RestControllerAdvice ExceptionHandler* RestControllerAdvice Controller ResponseBody 返回JSON的数据格式绕开视图解析器*/
ControllerAdvice
public class GlobalException2{ExceptionHandlerpublic ModelAndView exceptionHandler(Exception e){ModelAndView mvnew ModelAndView();//设置错误页面mv.setViewName(error);//判断异常类型if(e instanceof BusinessException){BusinessException ex(BusinessException)e;mv.addObject(msg,系统繁忙请稍后再试.......);}mv.setView(new MappingJackson2JsonView());return mv;}}(2) 返回JSON格式
package com.xqx.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;import java.util.HashMap;
import java.util.Map;/*** SpingMVC提供的第三种种全局异常处理方式* 1ControllerAdvice ExceptionHandler* 2RestControllerAdvice ExceptionHandler* RestControllerAdvice Controller ResponseBody 返回JSON的数据格式绕开视图解析器*/
RestControllerAdvice
public class GlobalException2{ExceptionHandlerpublic ModelAndView exceptionHandler(Exception e){ModelAndView mvnew ModelAndView();mv.setViewName(error);//判断异常类型if(e instanceof BusinessException){BusinessException ex(BusinessException)e;mv.addObject(msg,系统繁忙请稍后再试.......);}//强制更换视图解析器 不跳页面mv.setView(new MappingJackson2JsonView());return mv;}}(3) 返回异常信息和状态码
package com.xqx.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;import java.util.HashMap;
import java.util.Map;/*** SpingMVC提供的第三种种全局异常处理方式* 1ControllerAdvice ExceptionHandler* 2RestControllerAdvice ExceptionHandler* RestControllerAdvice Controller ResponseBody 返回JSON的数据格式绕开视图解析器*/
RestControllerAdvice
public class GlobalException2{ExceptionHandlerpublic MapString, Object exceptionHandler(Exception e){MapString, Object jsonnew HashMap();//判断异常类型if(e instanceof BusinessException){json.put(msg,系统繁忙请稍后再试.......);json.put(code,500);}return json;}
}