目录
1、ResponseBodyAdvice
/**
* 返回结果统一处理
*/
@RestControllerAdvice(basePackages = {"com.xx"})
public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> {
/***
* 1、如果返回类型是BaseResult类型,则返回true。返回true就直接结束了
* 2、如果不是BaseResult类型,会进入到beforeBodyWrite这个方法内部。
* @param returnType
* @param aClass
* @return
*/
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> aClass) {
// 如果接口返回的类型本身就是BaseResult那就没有必要进行额外的操作,返回false
return !returnType.getGenericParameterType().equals(BaseResult.class);
}
@Override
public Object beforeBodyWrite(Object data, MethodParameter returnType, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest request, ServerHttpResponse response) {
// String类型不能直接包装,所以要进行些特别的处理
if (returnType.getGenericParameterType().equals(String.class)) {
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将数据包装在BaseResult里后,再转换为json字符串响应给前端
return objectMapper.writeValueAsString(new BaseResult(data));
} catch (JsonProcessingException e) {
throw new APIException("返回String类型错误");
}
}
// 将原本的数据包装在ResultVO里
return new BaseResult(data);
}
}
2、BaseResult
public class BaseResult<T> {
/**
* 请求状态
*/
private Integer httpCode;
/**
* 状态短语
*/
private String reasonPhrase;
/**
* 返回数据
*/
private T data;
/**
* 额外数据
*/
private Object extraData;
/**
* 提示信息
*/
private String message;
//getter setter方法
}