
目录
2.1 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;
2.2 实现Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器;
2.3 使用@ControllerAdvice + @ExceptionHandle
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-databindartifactId>
- <version>2.9.3version>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-coreartifactId>
- <version>2.9.3version>
- dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.coregroupId>
- <artifactId>jackson-annotationsartifactId>
- <version>2.9.3version>
- dependency>
在spring-mvc.xml文件里面添加以下配置
- <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">
-
- <property name="supportedMediaTypes">
- <list>
- <value>text/html;charset=UTF-8value>
- <value>text/json;charset=UTF-8value>
- <value>application/json;charset=UTF-8value>
- list>
- property>
- bean>
在请求处理方法中添加@ResponseBody注解,将返回结果直接转换成JSON
注:此请求处理方法返回的已经不是视图了
- @RequestMapping("/toJsonLoadBook")
- @ResponseBody
- public Book toJsonLoadBook(Book book){
- Book b = iBookService.selectByPrimaryKey(book.getBookId());
- return b;
- }
- @RequestMapping("/toJsonListBook")
- @ResponseBody
- public List
toJsonListBook(){ - List
list = iBookService.listBook(null, null); - return list;
- }
- @RequestMapping("/toJsonMap1")
- @ResponseBody
- public Map
toJsonMap1(Book book) { - Map
map = new HashMap<>(); - map.put("total", 888);
- map.put("success", true);
- //获取数据
- List
- map.put("data", maps);
- return map;
- }
- @RequestMapping("/toJsonMap2")
- @ResponseBody
- public Map
toJsonMap2(Book book) { - Map
map = new HashMap<>(); - map.put("total", 888);
- map.put("success", true);
- //获取数据
- List
- map.put("data", maps);
- return map;
- }
- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
-
- <property name="defaultErrorView" value="error"/>
-
- <property name="exceptionAttribute" value="ex"/>
-
- <property name="exceptionMappings">
- <props>
- <prop key="java.lang.RuntimeException">errorprop>
- props>
-
- property>
- bean>
在controller层验证判断id大与500就会抛出异常在spring-mvc.xml配置文件加上的配置就会处理异常抛出跳转到你创建的error.jsp那个页面
- @RequestMapping("/toJsonLoadBook")
- @ResponseBody
- public Book toJsonLoadBook(Book book){
- if(book.getBookId()>=500){
- throw new RuntimeException("书本ID大于500,抛出异常");
- }
- Book b = iBookService.selectByPrimaryKey(book.getBookId());
- b.setDate(new Date());
- return b;
- }
- package com.jmh.mybatis.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;
-
- /**
- * 全局异常处理
- */
- @Component
- public class GloabException implements HandlerExceptionResolver {
-
-
- @Override
- public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, java.lang.Exception e) {
- //定义一个视图
- ModelAndView mv=new ModelAndView();
- //判断ex是否和Run异常有关系
- if(e instanceof RuntimeException){
- //强转
- RuntimeException e1=(RuntimeException)e;
- //将获取到的数据保存到作用域里面
- mv.addObject("msg", e1.getMessage());
- }
- //设置跳转页面
- mv.setViewName("error");
- return mv;
- }
- }
- @RequestMapping("/toJsonLoadBook")
- @ResponseBody
- public Book toJsonLoadBook(Book book){
- if(book.getBookId()>=500){
- throw new RuntimeException("书本ID大于500,抛出异常");
- }
- Book b = iBookService.selectByPrimaryKey(book.getBookId());
- b.setDate(new Date());
- return b;
- }
- package com.jmh.mybatis.exception;
-
- /**
- * 异常通知
- */
- public class IdOverException extends RuntimeException{
- public IdOverException() {
- super();
- }
-
- public IdOverException(String message) {
- super(message);
- }
-
- public IdOverException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public IdOverException(Throwable cause) {
- super(cause);
- }
-
- protected IdOverException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
- }
- package com.jmh.mybatis.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 javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
-
- @ControllerAdvice
- public class Exception {
-
- @ExceptionHandler
- public ModelAndView resolveException(java.lang.Exception e) {
- //定义一个视图
- ModelAndView mv=new ModelAndView();
- //判断ex是否和Run异常有关系
- if(e instanceof RuntimeException){
- //强转
- RuntimeException e1=(RuntimeException)e;
- //将获取到的数据保存到作用域里面
- mv.addObject("msg", e1.getMessage());
- }
- //设置跳转页面
- mv.setViewName("error");
- return mv;
- }
- }
- @RequestMapping("/toJsonLoadBook")
- @ResponseBody
- public Book toJsonLoadBook(Book book){
- if(book.getBookId()>=500){
- throw new IdOverException("书本ID大于500,抛出异常");
- }
- Book b = iBookService.selectByPrimaryKey(book.getBookId());
- b.setDate(new Date());
- return b;
- }
