自定义后端返回格式ResultData
@Data
public class ResultData<T> {
private int status;
private String message;
private T data;
private long timestamp;
public ResultData(){
this.timestamp = System.currentTimeMillis();
}
public static <T> ResultData<T> success(T data){
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(ReturnCode.RC200.getCode());
resultData.setMessage(ReturnCode.RC200.getMessage());
resultData.setData(data);
return resultData;
}
public static <T> ResultData<T> fail(int code,String message){
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(code);
resultData.setMessage(message);
return resultData;
}
}
自定义后端返回消息和状态码ReturnCode
public enum ReturnCode {
RC200(200,"操作成功"),
RC400(400,"操作失败"),
RC500(500,"系统异常,请稍后再试");
private final int code;
private final String message;
ReturnCode(int code,String message){
this.code = code;
this.message = message;
}
public int getCode(){
return code;
}
public String getMessage(){
return message;
}
}
实现ResponseBodyAdvice接口,添加@RestControllerAdvice注解,对返回数据进行处理
@RestControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof ResultData){
return body;
}
return ResultData.success(body);
}
}
使用@RestControllerAdvice进行全局异常处理
@Slf4j
@RestControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ResultData<String> exception(Exception e){
log.error("错误:{}",e.getMessage());
return ResultData.fail(ReturnCode.RC500.getCode(), e.getMessage());
}
}