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

网友投稿 884 2023-05-24

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

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

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

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 {

public int code; //返回状态码200成功

private String msg; //返回描述信息

private T data; //返回内容体

public ResponseResult setCode(ResultCode retCode) {

this.code = retCode.code;

return this;

}

public int getCode() {

return code;

}

public ResponseResult setCode(int code) {

this.code = code;

return this;

}

public String getMsg() {

return msg;

}

http://

public ResponseResult setMsg(String msg) {

this.msg = msg;

return thAvDnYmKOIis;

}

public T getData() {

return data;

}

public ResponseResult setData(T data) {

this.data = dataAvDnYmKOI;

return this;

}

}

在定义一个统一返回类:

3、Response

public class Response {

private final static String SUCCESS = "success";

private final static String FAIL = "fail";

public static ResponseResult makeOKRsp() {

return new ResponseResult().setCode(ResultCode.SUCCESS).setMsg(SUCCESS);

}

public static ResponseResult makeOKRsp(String message) {

return new ResponseResult().setCode(ResultCode.SUCCESS).setMsg(message);

}

public static ResponseResult makeOKRsp(T data) {

return new ResponseResult().setCode(ResultCode.SUCCESS).setMsg(SUCCESS).setData(data);

}

public static ResponseResult makeErrRsp(String message) {

return new ResponseResult().setCode(ResultCode.INTERNAL_SERVER_ERROR).setMsg(message);

}

public static ResponseResult makeRsp(int code, String msg) {

return nAvDnYmKOIew ResponseResult().setCode(code).setMsg(msg);

}

public static ResponseResult makeRsp(int code, String msg, T data) {

return new ResponseResult().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 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("请求方式不支持异常");

}

/*==========AvDnYmKOI=== 请求错误 end ==============================================*/

}

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

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Nexus搭建Maven私服的方法步骤
下一篇:Scala函数式编程专题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~