Spring实现统一返回值格式

用于项目中全局处理返回结果

自定义返回结果实体:

public class Result<T> implements Serializable {

    private static final long serialVersionUID = -2354377668069235864L;
    public int code;
    private T data;
    private String message = "调用成功!";

    public Result(){
    }
    public Result(T data){
        this.data = data;
    }
    public Result(int code, String message){
        this.code = code;
        this.message = message;
    }



    public Integer getCode() {
        return code;
    }

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

    public T getData() {
        return data;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String toJson(){
        return JSON.toJSONString(this);
    }

    public static Result<?> fail(String message) {
        return new Result<>(500,message);
    }
}

@ControllerAdvice处理返回结果

@ControllerAdvice
public class ResponseAdvisor 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) {

        String requestPath = request.getURI().getPath();
        /*if (!requestPath.startsWith("/canal/park")) {
            return body;
        }*/

        if (body instanceof Result) {
            return body;
        }

        return new Result(body);
    }
}

 

posted @ 2018-01-22 13:58  ByteNotes  阅读(1324)  评论(0编辑  收藏  举报