• 当前位置: 首 页 > 教育百科 > 其他 > 正文

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

    :2020年06月19日
    java1234

    在前后端分离的情况下,我们经常会定义一个统一的反回数据格式,通常都会包含状态码,返回信息,返回的数据,是否成功等参数。1、ResultCode 单独定义了一个ReturnCode枚举类用于存储代码和返回的M...

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

    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("查询用户信息异常");

    }

    }

    返回结果:

    640-4.png

    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的异常:

    ————————————————

    版权声明:本文为CSDN博主「CurtainMy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    [编辑:王振袢 &发表于江苏]
    [我要纠错]

    来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
    声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

    关键词: 在前 后端 分离 情况下 我们
    有价值
    0
    无价值
    0
    猜您喜欢
    最热文章

    暂不支持手机端,请登录电脑端访问

    正在加载验证码......

    请先完成验证