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;
}
}