springBoot統一響應處理統一異常處理

springboot中的統一響應處理方案

1、統一響應類 CommonResponse

package cn.bestriven.www.vo;

import lombok.Data;
import org.springframework.stereotype.Component;

import java.io.Serializable;

/**
 * @Author: liufan
 * @Date: 2019/8/19 16:08
 * @Description:
 */
@Data
@Component
public class CommonResponse<T> implements Serializable {
    private Integer code;
    private String message;
    private T data;

    public CommonResponse(Integer code,String message){
        this.code = code;
        this.message = message;
    }

}

2、方法攔截器CommonResponseDataAdvice

package cn.bestriven.www.advice;

import cn.bestriven.www.annotation.IgnoreResponseAdvice;
import cn.bestriven.www.vo.CommonResponse;
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.lang.Nullable;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

/**
 * @Author: liufan
 * @Date: 2019/8/19 16:31
 * @Description:
 */
@RestControllerAdvice
public class CommonResponseDataAdvice  implements ResponseBodyAdvice<Object> {
    /**
     * 判斷是否攔截
     * @param methodParameter  根據方法參數判斷
     * @param aClass 根據類判斷
     * @return
     */
    @Override
    @SuppressWarnings("all")
    public boolean supports(MethodParameter methodParameter,
                            Class<? extends HttpMessageConverter<?>> aClass) {
        if(methodParameter.getDeclaringClass().isAnnotationPresent(IgnoreResponseAdvice.class)){
            return false;
        }else if(methodParameter.getMethod().isAnnotationPresent(IgnoreResponseAdvice.class)){
            return false;
        }else{
            return true;
        }

    }

    /**
     * 在寫入響應前的操作
     * @param o
     * @param methodParameter
     * @param mediaType
     * @param aClass
     * @param serverHttpRequest
     * @param serverHttpResponse
     * @return
     */
    @Override
    @Nullable
    @SuppressWarnings("all")
    public Object beforeBodyWrite(Object o,
                                  MethodParameter methodParameter,
                                  MediaType mediaType,
                                  Class<? extends HttpMessageConverter<?>> aClass,
                                  ServerHttpRequest serverHttpRequest,
                                  ServerHttpResponse serverHttpResponse) {
        CommonResponse<Object> response = new CommonResponse<>(0,"");
        if(null == o ){
            return response;
        }else if(o instanceof  CommonResponse){
            response = (CommonResponse<Object>) o;
        }else{
            response.setData(o);
        }
        return response;
    }
}

忽略轉換成統一響應的註解

package cn.bestriven.www.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Author: liufan
 * @Date: 2019/8/19 16:33
 * @Description:
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {
}

springBoot中統一異常處理

1、統一異常類

package cn.bestriven.www.exception;

/**
 * @Author: liufan
 * @Date: 2019/8/19 16:40
 * @Description:
 */
public class AdException extends Exception {
    public AdException(String message){
        super(message);
    }
}

2、統一異常攔截器

package cn.bestriven.www.advice;

import cn.bestriven.www.exception.AdException;
import cn.bestriven.www.vo.CommonResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;

/**
 * @Author: liufan
 * @Date: 2019/8/19 16:41
 * @Description:
 */
@RestControllerAdvice
public class GlobalExceptionAdvice  {

    @ExceptionHandler(value = AdException.class)
    public CommonResponse<String> handlerAdException(HttpServletRequest request,
                                                     AdException exception){
        CommonResponse<String> response = new CommonResponse<>(-1,"error");
        response.setData(exception.getMessage());
        return response;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章