package com.xiang.tour.common;
public class R {
private Integer code;
private Object data;
private String message;
private R() {
}
public static R success(Object data, String message) {
R r = new R();
r.setCode(ResponseEnum.SUCCESS.getCode());
r.setData(data);
r.setMessage(message == null ? ResponseEnum.SUCCESS.getMessage() : message);
return r;
}
public static R success(Object data) {
return success(data, null);
}
public static R fail(Integer code, String message) {
R r = new R();
r.setCode(code);
r.setData(null);
r.setMessage(message);
return r;
}
public static R fail(ResponseEnum responseEnum) {
R r = new R();
r.setCode(responseEnum.getCode());
r.setData(null);
r.setMessage(responseEnum.getMessage());
return r;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.xiang.tour.common;
public enum ResponseEnum {
SUCCESS(200,"成功!"),
USER_REG_USER_PASSWORD_CODE(401,"用户名和密码错误"),
USER_REG_USER_PASSWORD_CONFIRM(402,"密码和确认密码不一致"),
ORDER_FAIL(601,"订单失败"),
ORDER_MESSAGE_FAIL(602,"订单发送消息失败") ;
private Integer code;
private String message;
ResponseEnum(Integer code,String mesage){
this.code = code;
this.message =mesage;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package com.xiang.tour.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xiang.tour.common.R;
import com.xiang.tour.common.exception.ErrorHandler;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
@RestControllerAdvice(basePackages = "com.xiang.tour.controller")
public class ResultResponseHandler implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse){
if (o instanceof ErrorHandler) {
ErrorHandler errorHandler = (ErrorHandler) o;
return R.fail(errorHandler.getStatus(), errorHandler.getMessage());
} else if (o instanceof String) {
try {
ObjectMapper objectMapper = new ObjectMapper();
R r = R.success(o);
return objectMapper.writeValueAsString(r);
}catch ( Exception ex){
ex.printStackTrace();
}
}
return R.success(o);
}
}
public class ErrorHandler {
private Integer status;
private String message;
private String exception;
public static ErrorHandler fail(ResultCodeEnum resultCodeEnum, Throwable throwable, String message) {
ErrorHandler errorHandler = ErrorHandler.fail(resultCodeEnum, throwable);
errorHandler.setMessage(message);
return errorHandler;
}
public static ErrorHandler fail(ResultCodeEnum resultCodeEnum, Throwable throwable) {
ErrorHandler errorHandler = new ErrorHandler();
errorHandler.setMessage(resultCodeEnum.getMessage());
errorHandler.setStatus(resultCodeEnum.getCode());
errorHandler.setException(throwable.getClass().getName());
return errorHandler;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getException() {
return exception;
}
public void setException(String exception) {
this.exception = exception;
}
}
public enum ResultCodeEnum {
UNKNOWN_REASON(false, 20001, "未知错误"),
SERVER_ERROR(false, 500, "服务器忙,请稍后在试"),
ORDER_CREATE_FAIL(false, 601, "订单下单失败");
private Boolean success;
private Integer code;
private String message;
private ResultCodeEnum(Boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
public Boolean getSuccess() {
return success;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}