spring boot统一处理结果(含异常)

1.定义返回结果模板

public class Result<T> {

    /* 状态码 */
    private String code;

    /* 提示信息  */
    private String msg;

    /* 返回的数据 */
    private T data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

}

2.自定义异常

public class MyException extends RuntimeException{

    private static final long serialVersionUID = 7112519404688544220L;

    /* 状态码 */
    private String code;

    public MyException (String code,String msg){
        super(msg);
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

}

3.统一异常处理

@ControllerAdvice
public class ExceptionHandle {

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

    @ExceptionHandler(value=MyException.class)
    @ResponseBody
    public Result<Object> exceptionHandle(Exception e){
        if(e instanceof MyException){
            MyException mye = (MyException)e;
            return ResultUtil.error(mye.getCode(), mye.getMessage());
        }else{
            logger.error("【系统异常】{}", e);
            return ResultUtil.error("-1", "未知错误");
        }
    }

}

4.统一结果处理

@ControllerAdvice
public class ResultHandle implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Object beforeBodyWrite(Object object, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        if(object instanceof Result){
            Result<Object> result = (Result<Object>) object;
            if(!result.getCode().equals("0")){
                return result;
            }
        }
        return ResultUtil.success(object);
    }
}

5.测试

util
public class ExceptionUtil {

    public static void throwError(String code){
        throw new MyException(code,PropertiesUtil.errRes.getString(code));
    }

    public static void throwError(String code,String message){
        throw new MyException(code,message);
    }

}
public class PropertiesUtil {

    public static PropertyResourceBundle errRes = (PropertyResourceBundle) PropertyResourceBundle.getBundle("properties/error"); 

}
Controller层
@GetMapping("/girls/{id}")
public Girl girlById(@PathVariable("id")Integer id){
    return girlService.girlById(id);
}
Service层
public Girl girlById(Integer id) {
    Girl girl = girlRepository.findOne(id);
    Integer age = girl.getAge();
    if(age < 10){
        ExceptionUtil.throwError("100");
    }else if(age >=10 && age < 16){
        ExceptionUtil.throwError("101");
    }

    return girl;
}

演示结果:
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值