需求:

  1.spring boot 项目restful 风格统一放回json

  2.不在controller写try catch代码块简洁controller层

  3.对异常做统一处理,同时处理@Validated 校验器注解的异常

方法:

  @ControllerAdvice 注解定义全局异常处理类

  

@ControllerAdvice
public class ControllerExceptionHandler {

}

  @ExceptionHandler 注解声明异常处理方法

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerException(Exception e){
logger.error(e.getMessage(),e);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,e.getMessage());
return responseResult;
}

  处理@Validated 校验器注解的异常

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerMethodArgumentException(MethodArgumentNotValidException e){
logger.error(e.getMessage(),e);

BindingResult bindingResult = e.getBindingResult();
String message = ValidMethodUtils.validMethod(bindingResult);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,message);
return responseResult;
}

完整代码如下:

package com.travelsky.travelcloud.exception;

import com.travelsky.travelcloud.utils.ResponseCode;
import com.travelsky.travelcloud.utils.ResponseResult;
import com.travelsky.travelcloud.utils.bizutils.ValidMethodUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**异常统一处理的类
* Created by Liyan on 2018/3/22.
*/
@ControllerAdvice
public class ControllerExceptionHandler {

private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);

/*create by LiYan on 2018.3.25.
* 处理不可预知的异常
* */
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerException(Exception e){
logger.error(e.getMessage(),e);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,e.getMessage());
return responseResult;
}

/*create by LiYan on 2018.3.30.
* 处理接口数据校验的异常
* */
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResponseResult handlerMethodArgumentException(MethodArgumentNotValidException e){
logger.error(e.getMessage(),e);

BindingResult bindingResult = e.getBindingResult();
String message = ValidMethodUtils.validMethod(bindingResult);
ResponseResult responseResult = new ResponseResult(ResponseCode.ERROR,message);
return responseResult;
}

}

如处理自定义异常可修改如下注解

@ExceptionHandler(自定义异常.class)

Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常的更多相关文章

  1. Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json

    需求 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0,  "data": {},  "msg": ...

  2. Spring @ControllerAdvice @ExceptionHandler 全局处理异常

    对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...

  3. Spring Boot中Restful Api的异常统一处理

    我们在用Spring Boot去向前端提供Restful Api接口时,经常会遇到接口处理异常的情况,产生异常的可能原因是参数错误,空指针异常,SQL执行错误等等. 当发生这些异常时,Spring B ...

  4. Spring Boot优雅地处理404异常

    背景 在使用SpringBoot的过程中,你肯定遇到过404错误.比如下面的代码: @RestController @RequestMapping(value = "/hello" ...

  5. 必须知道的Spring Boot中的一些Controller注解

    这篇文章是抄其他人的,原址:https://cloud.tencent.com/developer/article/1082720 本文旨在向你介绍在Spring Boot中controller中最基 ...

  6. @ControllerAdvice+@ExceptionHandler处理架构异常捕获

    1.注解引入 1) @ControllerAdvice - 控制器增强 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) ...

  7. Spring Boot 知识笔记(全局异常)

    通过ControllerAdvice和ExceptionHandler捕获异常和错误信息,向前端返回json格式的状态码及异常描述信息. 1.新建一个Controller,抛出一个异常. packag ...

  8. Java spring boot 2.0连接mysql异常:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    解决办法:application.yml提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当使用新的驱动com.mysql.cj.jdbc.Driver' com.my ...

  9. spring boot快速入门 3: controller的使用

    模版引擎的使用: 第一步:在POM文件添加配置 <!-- 模版引擎 --> <dependency> <groupId>org.springframework.bo ...

随机推荐

  1. Java并发--Timer和TimerTask

    下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了r ...

  2. TLS支持版本检测

    今天有开发同事询问“生产环境的TLS版本是多少”,这个问题还真没太关注过,首先想到的是通过Chrome浏览器的开发者工具查看一下,访问https页面查看如下: 这太概是说使用了TLS1.2,于是截图给 ...

  3. Tornado之架构概述图

    一.Tornado之架构概述图 二.Application类详细分析: #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "S ...

  4. python模块--os模块、sys模块

    一.os模块 1 os.getcwd() 获取当前工作的目录,即当前python脚本工作的目录路径 2 3 os.chdir("dirname") 改变当前脚本的工作目录:相当于s ...

  5. travis-cli 使用

    1. 添加项目 登录 travis 选择对应项目即可 2. 添加持续集成文件 .travis.yml language: node_js node_js: - "node" bef ...

  6. js前台调用lodop打印

    lodop简单介绍 lodop的打印功能已经非常强大,也在带web端的图形界面,可以供用户使用.使用js在前台调用lodop打印,一般分为两种方法: 1:特殊的指令打印,这种打印方式,是采用的与js无 ...

  7. spring整合xfire出现Document root element "beans", must match DOCTYPE root "null"错误解决方案

    fire自带的包下有个spring1.2.6的jar包,而工程的jar包是2.0的. 解决方案: 1.将原配置文件的头schema方式换为DOCTYPE方式,原配置文件如下(非maven) <? ...

  8. CentOS配置网易163 yum源

    使用说明 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cen ...

  9. angular的require模块的使用($requireProvider的作用)

      今天我们学习一下angular的另一个几乎被忽略的模块angular-require 先给出链接地址(git:)   https://github.com/Treri/angular-requir ...

  10. 谈谈GPU与FPGA的一些看法

    从几个方面来介绍一下GPU和FPGA. 从峰值性能来说,GPU(10Tflops)远远高于FPGA(<1TFlops).GPU上面成千上万个core同时跑在GHz的频率上还是非常壮观的,最新的G ...