天天看點

springboot controller統一的接口傳回值和異常處理

1、傳回結果模型

@ApiModel("傳回結果模型")
public class JsonResult<T> implements Serializable {

	@ApiModelProperty("傳回結果提示")
	private String msg = null;
	@ApiModelProperty("傳回結果狀态")
	private String status = null;
	@ApiModelProperty("傳回結果資料")
	private T result = null;


	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public T getResult() {
		return result;
	}

	public void setResult(T result) {
		this.result = result;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public JsonResult(){
	}

	public JsonResult(String status, String msg, T result){
	    this.status = status;
	    this.msg = msg;
	    this.result = result;
    }

    public JsonResult(String status, String msg){
        this.status = status;
        this.msg = msg;
    }

    public JsonResult(ResultEnum resultEnum){
		this.status = resultEnum.getStatus();
		this.msg = resultEnum.getMsg();
	}

	public JsonResult(ResultEnum resultEnum, T result){
		this.status = resultEnum.getStatus();
		this.msg = resultEnum.getMsg();
		this.result = result;
	}
}
           

2、傳回編碼枚舉類模型

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 13:55
 * @Description ${DESCRIPTION}
 */
public enum ResultEnum {

    SUCCESS("ok","調用成功"),
    ERROR("error","調用失敗");

    private String status;
    private String msg;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    ResultEnum(String status,String msg){
        this.status = status;
        this.msg = msg;
    }
}
           

3、傳回結果工具類

/**
 * @author code
 * @version 1.0
 * @Date 2021/7/22 15:50
 * @Description ${DESCRIPTION}
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("資料傳回結果")
public class ResultUtil<T> {

    public static JsonResult success(){
        return new JsonResult(ResultEnum.SUCCESS);
    }

    public static JsonResult success(String msg){
        return new JsonResult(ResultEnum.SUCCESS.getStatus(),msg);
    }

    public static <T> JsonResult<T> success(T result){
        return new JsonResult<T>(ResultEnum.SUCCESS, result);
    }

    public static JsonResult error(){
        return new JsonResult(ResultEnum.ERROR);
    }

    public static JsonResult error(String msg){
        return new JsonResult(ResultEnum.ERROR.getStatus(),msg);
    }

    public static <T> JsonResult error(T result){
        return new JsonResult<T>(ResultEnum.ERROR, result);
    }
}
           

4、controller統一處理傳回值

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 15:30
 * @Description ${統一傳回值}
 */
@RestControllerAdvice
public class ControllerHandleAdvice implements ResponseBodyAdvice<Object> {

    private final static Logger logger = LoggerFactory.getLogger(ControllerHandleAdvice.class);

    @Override
    public boolean supports(MethodParameter methodParameter, Class<?extends HttpMessageConverter<?>> converterType){
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<?extends HttpMessageConverter<?>> converterType, ServerHttpRequest request, ServerHttpResponse response){
        if(body instanceof String){
            String msg = (String) body;
            return ResultUtil.success(msg);
        } else if(null == body) {

        }

        return body;
    }
}
           

5、controller統一異常處理

/**
 * @author code
 * @version 1.0
 * @Date 2021/8/9 10:56
 * @Description ${統一異常傳回值}
 */
@RestControllerAdvice
public class ControllerExceptionHandleAdvice {
    private final static Logger logger = LoggerFactory.getLogger(ControllerExceptionHandleAdvice.class);

    @ExceptionHandler
    public JsonResult handler(HttpServletRequest request, HttpServletResponse response,Exception e){
        logger.info("restful請求異常");
        JsonResult jsonResult = new JsonResult();
        if(e instanceof NullPointerException){
            logger.error("空指針異常");
            jsonResult.setStatus("error");
            jsonResult.setResult("空指針異常");
        }else if(e instanceof IllegalArgumentException){
            logger.error("請求參數類型不比對");
            jsonResult.setStatus("error");
            jsonResult.setResult("請求參數類型不比對");
        }else if(e instanceof SQLException){
            logger.error("資料庫通路異常");
            jsonResult.setStatus("error");
            jsonResult.setResult("資料庫通路異常");
        }else {
            logger.error("通路異常"+e.getMessage());
            jsonResult.setStatus("error");
            jsonResult.setResult("服務通路異常"+e.getMessage());
        }
        return jsonResult;
    }
}
           

繼續閱讀