SpringMVC(Json和全局异常处理)

目录

1. Json三种数据格式

1.1 添加相关依赖和配置文件

1.2 对象格式

1.3 list格式

1.4 混合格式

 2. SpringMVC全局异常处理

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

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

2.3 使用@ControllerAdvice + @ExceptionHandle


1. Json三种数据格式

 1.1 添加相关依赖和配置文件

  • 在pom.xml文件里面添加以下依赖 
   <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> 
  • 在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">
        <!--处理中文乱码以及避免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>

 1.2 对象格式

 在请求处理方法中添加@ResponseBody注解,将返回结果直接转换成JSON

 注:此请求处理方法返回的已经不是视图了 

    @RequestMapping("/toJsonLoadBook")
    @ResponseBody
    public Book toJsonLoadBook(Book book){
        Book b = iBookService.selectByPrimaryKey(book.getBookId());
        return b;
    }

 1.3 list格式

    @RequestMapping("/toJsonListBook")
    @ResponseBody
    public List<Book> toJsonListBook(){
        List<Book> list = iBookService.listBook(null, null);
        return list;
    }

 1.4 混合格式

  • 单个 
    @RequestMapping("/toJsonMap1")
    @ResponseBody
    public Map<String ,Object> toJsonMap1(Book book) {
        Map<String, Object> map = new HashMap<>();
        map.put("total", 888);
        map.put("success", true);
        //获取数据
        List<Map<String, Object>> maps = iBookService.jsonMap(book.getBookId());
        map.put("data", maps);
        return map;
    }
  •  多个
    @RequestMapping("/toJsonMap2")
    @ResponseBody
    public Map<String ,Object> toJsonMap2(Book book) {
        Map<String, Object> map = new HashMap<>();
        map.put("total", 888);
        map.put("success", true);
        //获取数据
        List<Map<String, Object>> maps = iBookService.jsonMap1(book);
        map.put("data", maps);
        return map;
    }

 2. SpringMVC全局异常处理

  • 注!!!需先创建一个error.jsp抛出异常而呈现在前端页面的类 

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

  • 在spring-mvc.xml文件里面添加以下配置
<!-- 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> 
  • Controller层代码

 在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;
    }

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

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;
    }
}
  • Controller层
    @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;
    }

 2.3 使用@ControllerAdvice + @ExceptionHandler

  • 定义异常通知 
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;
    }
}
  •  Controller层
    @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;
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值