java重写controller返回体

1、新建类MyResponseBody

添加@ControllerAdvice注解,实现ResponseBodyAdvice的接口,其中由于StringHttpMessageConverter对返回为字符串的类型做特殊处理,会报异常,因此这里也应做特殊处理

package test.supcon.util;

import com.alibaba.fastjson.JSONObject;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

/**
 * @author: zhaoxu
 * @date: 2021/4/20 21:59
 */
@ControllerAdvice
public class MyResponseBody implements ResponseBodyAdvice {
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter arg1,
                                  MediaType arg2, Class arg3, ServerHttpRequest arg4,
                                  ServerHttpResponse arg5) {
        JSONObject map = new JSONObject();
        map.put("data", body);
        map.put("code", 0);
        map.put("msg", "success");
        if(body instanceof String){
            return map.toJSONString();
        }
        return map;
    }

    @Override
    public boolean supports(MethodParameter arg0, Class arg1) {
        return true;
    }
}

在这里插入图片描述

2、统一异常处理

使用@ControllerAdvice@ExceptionHandler注解

/**
 * 统一异常处理器
 * java中异常分类 Exception->(IOException & RuntimeException),详情请自行查阅文档
 */
@Slf4j
@ControllerAdvice
public class ExceptionAdviceHandler {
    /**
     * RuntimeException异常捕获并统一处理
     */
    @ExceptionHandler(value = RuntimeException.class)
    @ResponseBody
    public ResponseJson handle(RuntimeException e) {
        log.info("RuntimeException异常或其子类异常捕获:{}", e.getMessage());

        if(e instanceof BusinessException){
            BusinessException ex=(BusinessException)e;
            log.error("{}:{}", ex.getClass(),ex.getMessage());
            return ResponseJson.error(ex.getCode(), ex.getMessage());
        }
        // 如果其他类型的RuntimeException子类,可在此处罗列
        // ……
        return ResponseJson.error(ResponseEnum.SERVER_ERROR.getCode(), e.getMessage());
    }

    /**
     * 顶级异常捕获并统一处理,当其他异常无法处理时候选择使用
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseJson handle(Exception e) {
        log.error("系统内部服务异常:{}", e.getMessage());
        return ResponseJson.error(ResponseEnum.SERVER_ERROR);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值