Spring Boot 捕捉全局异常 统一返回值的问题

 更新时间:2020年6月18日 07:24  点击:1805

 在前后端分离的情况下,我们经常会定义一个统一的反回数据格式,通常都会包含状态码,返回信息,返回的数据,是否成功等参数。

1、ResultCode

  单独定义了一个ReturnCode枚举类用于存储代码和返回的Message

public enum ResultCode {
 //成功
 SUCCESS(200),
 // 失败
 FAIL(400),
 
 // 未认证(签名错误)
 UNAUTHORIZED(401),
 
 // 接口不存在
 NOT_FOUND(404),
 
 // 服务器内部错误
 INTERNAL_SERVER_ERROR(500);
 public int code;
 ResultCode(int code)
 {
  this.code=code;
 }
}

2、ResponseResult

/*
 统一返回信息
 */
public class ResponseResult<T> {
 public int code; //返回状态码200成功
 
 private String msg; //返回描述信息
 
 private T data; //返回内容体
 
 public ResponseResult<T> setCode(ResultCode retCode) {
  this.code = retCode.code;
  return this;
 }
 
 public int getCode() {
  return code;
 }
 
 public ResponseResult<T> setCode(int code) {
  this.code = code;
  return this;
 }
 
 public String getMsg() {
  return msg;
 }
 
 public ResponseResult<T> setMsg(String msg) {
  this.msg = msg;
  return this;
 }
 
 public T getData() {
  return data;
 }
 
 public ResponseResult<T> setData(T data) {
  this.data = data;
  return this;
 }
 
}

在定义一个统一返回类:

3、Response

public class Response {
 private final static String SUCCESS = "success";
 
 private final static String FAIL = "fail";
 
 public static <T> ResponseResult<T> makeOKRsp() {
  return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(SUCCESS);
 }
 
 public static <T> ResponseResult<T> makeOKRsp(String message) {
  return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(message);
 }
 
 public static <T> ResponseResult<T> makeOKRsp(T data) {
  return new ResponseResult<T>().setCode(ResultCode.SUCCESS).setMsg(SUCCESS).setData(data);
 }
 
 public static <T> ResponseResult<T> makeErrRsp(String message) {
  return new ResponseResult<T>().setCode(ResultCode.INTERNAL_SERVER_ERROR).setMsg(message);
 }
 
 public static <T> ResponseResult<T> makeRsp(int code, String msg) {
  return new ResponseResult<T>().setCode(code).setMsg(msg);
 }
 
 public static <T> ResponseResult<T> makeRsp(int code, String msg, T data) {
  return new ResponseResult<T>().setCode(code).setMsg(msg).setData(data);
 }
}

4、新建 IUserService

新建测试用户接口类

package com.example.demo.service;
import com.example.demo.entity.User;
public interface IUserService {
 public User getUserInfo();
}

5、新建 UserServiceImpl

新建测试用户信息服务类

package com.example.demo.service.impl;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
 
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
 
@Service
public class UserServiceImpl implements IUserService {
 public User getUserInfo(){
  User user = new User();
  user.setName("jack");
  user.setPassword(12341234);
 
  return user;
 }
 
}

6、在controller调用

@Autowired
 UserService service;
 @RequestMapping(value = "/getUserItem",method = RequestMethod.GET)
 public ResponseResult<User> getUserItem(){
  try {
   User user = service.getUserInfo();
   String[] arr= new String[]{"测试"};
   return Response.makeOKRsp(user);
  }catch (Exception e)
  {
   return Response.makeErrRsp("查询用户信息异常");
  }
 }

返回结果:

7、全局异常处理器 

/**
 * 全局异常处理
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
 
 /*============= 请求错误 start ==============================================*/
 
 /**
  * HTTP 请求方式不支持异常
  * HttpRequestMethodNotSupportedException
  * @return {@link ResponseResult}
  */
 @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
 public ResponseResult httpRequestMethodNotSupportException(HttpRequestMethodNotSupportedException e, HttpServletRequest request) {
  return Response.makeErrRsp("请求方式不支持异常");
 }
 
 /*============= 请求错误 end ==============================================*/
 
}

 修改一下getUserItem让其抛出自定义查询返回null的异常:

总结

到此这篇关于Spring Boot 捕捉全局异常 统一返回值的文章就介绍到这了,更多相关Spring Boot 捕捉全局异常 内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Spring AOP 对象内部方法间的嵌套调用方式

    这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • Spring Cloud 中@FeignClient注解中的contextId属性详解

    这篇文章主要介绍了Spring Cloud 中@FeignClient注解中的contextId属性详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • Springboot如何实现Web系统License授权认证

    这篇文章主要介绍了Springboot如何实现Web系统License授权认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-28
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • 详解springBoot启动时找不到或无法加载主类解决办法

    这篇文章主要介绍了详解springBoot启动时找不到或无法加载主类解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-16
  • 详解SpringCloudGateway内存泄漏问题

    这篇文章主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-16
  • SpringBoot集成Redis实现消息队列的方法

    这篇文章主要介绍了SpringBoot集成Redis实现消息队列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • 解决Springboot get请求是参数过长的情况

    这篇文章主要介绍了解决Springboot get请求是参数过长的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-17
  • Springboot+TCP监听服务器搭建过程图解

    这篇文章主要介绍了Springboot+TCP监听服务器搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-28
  • Spring为什么不推荐使用@Autowired注解详析

    @Autowired 注解的主要功能就是完成自动注入,使用也非常简单,但这篇文章主要给大家介绍了关于Spring为什么不推荐使用@Autowired注解的相关资料,需要的朋友可以参考下...2021-11-03
  • Spring Boot项目@RestController使用重定向redirect方式

    这篇文章主要介绍了Spring Boot项目@RestController使用重定向redirect方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-02
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • Java List集合返回值去掉中括号('[ ]')的操作

    这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • springboot中使用@Transactional注解事物不生效的坑

    这篇文章主要介绍了springboot中使用@Transactional注解事物不生效的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26
  • 详解SpringBoot之访问静态资源(webapp...)

    这篇文章主要介绍了详解SpringBoot之访问静态资源(webapp...),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-14
  • SpringBoot接口接收json参数解析

    这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
  • SpringMVC文件上传原理及实现过程解析

    这篇文章主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-15