From 66a0bbac26e63135907539349a5262056acfc1c8 Mon Sep 17 00:00:00 2001 From: johnniang Date: Tue, 19 Mar 2019 11:43:57 +0800 Subject: [PATCH] Deprecated JsonResult --- .../halo/model/support/BaseResponse.java | 58 +++++++++- .../ryanc/halo/model/support/JsonResult.java | 1 + .../base/CommonResultControllerAdvice.java | 19 ++-- .../base/ControllerExceptionHandler.java | 104 +++++++++--------- 4 files changed, 119 insertions(+), 63 deletions(-) diff --git a/src/main/java/cc/ryanc/halo/model/support/BaseResponse.java b/src/main/java/cc/ryanc/halo/model/support/BaseResponse.java index 5dcccdcb6..a8b881bf6 100644 --- a/src/main/java/cc/ryanc/halo/model/support/BaseResponse.java +++ b/src/main/java/cc/ryanc/halo/model/support/BaseResponse.java @@ -1,6 +1,9 @@ package cc.ryanc.halo.model.support; import lombok.*; +import org.springframework.http.HttpStatus; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; /** * Global response entity. @@ -12,14 +15,65 @@ import lombok.*; @EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor -public class BaseResponse { +public class BaseResponse { + /** + * Response status. + */ private Integer status; + /** + * Response message. + */ private String message; + /** + * Response development message + */ private String devMessage; - private Object data; + /** + * Response data + */ + private T data; + public BaseResponse(Integer status, String message, T data) { + this.status = status; + this.message = message; + this.data = data; + } + + /** + * Creates an ok result with message and data. (Default status is 200) + * + * @param data result data + * @param message result message + * @return ok result with message and data + */ + @NonNull + public static BaseResponse ok(@Nullable String message, @Nullable T data) { + return new BaseResponse<>(HttpStatus.OK.value(), message, data); + } + + /** + * Creates an ok result with message only. (Default status is 200) + * + * @param message result message + * @return ok result with message only + */ + @NonNull + public static BaseResponse ok(@Nullable String message) { + return ok(message, null); + } + + /** + * Creates an ok result with data only. (Default message is OK, status is 200) + * + * @param data data to response + * @param data type + * @return base response with data + */ + public static BaseResponse ok(@NonNull T data) { + return new BaseResponse<>(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), data); + } } diff --git a/src/main/java/cc/ryanc/halo/model/support/JsonResult.java b/src/main/java/cc/ryanc/halo/model/support/JsonResult.java index 470e8b92b..1859dc8be 100644 --- a/src/main/java/cc/ryanc/halo/model/support/JsonResult.java +++ b/src/main/java/cc/ryanc/halo/model/support/JsonResult.java @@ -15,6 +15,7 @@ import org.springframework.util.Assert; * @date : 2018/5/24 */ @Data +@Deprecated public class JsonResult { /** diff --git a/src/main/java/cc/ryanc/halo/web/controller/base/CommonResultControllerAdvice.java b/src/main/java/cc/ryanc/halo/web/controller/base/CommonResultControllerAdvice.java index 7762f10b5..f752d1deb 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/base/CommonResultControllerAdvice.java +++ b/src/main/java/cc/ryanc/halo/web/controller/base/CommonResultControllerAdvice.java @@ -1,6 +1,6 @@ package cc.ryanc.halo.web.controller.base; -import cc.ryanc.halo.model.support.JsonResult; +import cc.ryanc.halo.model.support.BaseResponse; import org.springframework.core.MethodParameter; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -27,17 +27,16 @@ public class CommonResultControllerAdvice extends AbstractMappingJacksonResponse // Get return body Object returnBody = bodyContainer.getValue(); - if (returnBody instanceof JsonResult) { - // If the return body is instance of JsonResult - JsonResult jsonResult = (JsonResult) returnBody; - response.setStatusCode(HttpStatus.resolve(jsonResult.getCode())); + if (returnBody instanceof BaseResponse) { + // If the return body is instance of BaseResponse + BaseResponse baseResponse = (BaseResponse) returnBody; + response.setStatusCode(HttpStatus.resolve(baseResponse.getStatus())); return; } - // Normal return body - HttpStatus okStatus = HttpStatus.OK; - JsonResult jsonResult = new JsonResult(okStatus.value(), okStatus.getReasonPhrase(), returnBody); - bodyContainer.setValue(jsonResult); - response.setStatusCode(okStatus); + // Wrap the return body + BaseResponse baseResponse = BaseResponse.ok(returnBody); + bodyContainer.setValue(baseResponse); + response.setStatusCode(HttpStatus.valueOf(baseResponse.getStatus())); } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/base/ControllerExceptionHandler.java b/src/main/java/cc/ryanc/halo/web/controller/base/ControllerExceptionHandler.java index abd5a643b..f7f8a2638 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/base/ControllerExceptionHandler.java +++ b/src/main/java/cc/ryanc/halo/web/controller/base/ControllerExceptionHandler.java @@ -2,7 +2,7 @@ package cc.ryanc.halo.web.controller.base; import cc.ryanc.halo.exception.HaloException; import cc.ryanc.halo.logging.Logger; -import cc.ryanc.halo.model.support.JsonResult; +import cc.ryanc.halo.model.support.BaseResponse; import cc.ryanc.halo.utils.ExceptionUtils; import cc.ryanc.halo.utils.ValidationUtils; import org.springframework.dao.DataIntegrityViolationException; @@ -18,8 +18,10 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.NoHandlerFoundException; +import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.Map; +import java.util.Set; /** * Exception handler of controller. @@ -33,102 +35,102 @@ public class ControllerExceptionHandler { @ExceptionHandler(DataIntegrityViolationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleDataIntegrityViolationException(DataIntegrityViolationException e) { - JsonResult jsonResult = handleBaseException(e); + public BaseResponse handleDataIntegrityViolationException(DataIntegrityViolationException e) { + BaseResponse baseResponse = handleBaseException(e); if (e.getCause() instanceof org.hibernate.exception.ConstraintViolationException) { - jsonResult = handleBaseException(e.getCause()); + baseResponse = handleBaseException(e.getCause()); } - jsonResult.setMsg("Failed to validate request parameter"); - return jsonResult; + baseResponse.setMessage("Failed to validate request parameter"); + return baseResponse; } @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleMissingServletRequestParameterException(MissingServletRequestParameterException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setMsg(String.format("Missing request parameter, required %s type %s parameter", e.getParameterType(), e.getParameterName())); - return jsonResult; + public BaseResponse handleMissingServletRequestParameterException(MissingServletRequestParameterException e) { + BaseResponse baseResponse = handleBaseException(e); + baseResponse.setMessage(String.format("Missing request parameter, required %s type %s parameter", e.getParameterType(), e.getParameterName())); + return baseResponse; } @ExceptionHandler(ConstraintViolationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleConstraintViolationException(ConstraintViolationException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); - jsonResult.setMsg("Field validation error"); - jsonResult.setResult(e.getConstraintViolations()); - return jsonResult; + public BaseResponse handleConstraintViolationException(ConstraintViolationException e) { + BaseResponse>> baseResponse = handleBaseException(e); + baseResponse.setStatus(HttpStatus.BAD_REQUEST.value()); + baseResponse.setMessage("Field validation error"); + baseResponse.setData(e.getConstraintViolations()); + return baseResponse; } @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); - jsonResult.setMsg("Field validation error"); + public BaseResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + BaseResponse> baseResponse = handleBaseException(e); + baseResponse.setStatus(HttpStatus.BAD_REQUEST.value()); + baseResponse.setMessage("Field validation error"); Map errMap = ValidationUtils.mapWithFieldError(e.getBindingResult().getFieldErrors()); - jsonResult.setResult(errMap); - return jsonResult; + baseResponse.setData(errMap); + return baseResponse; } @ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); - return jsonResult; + public BaseResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { + BaseResponse baseResponse = handleBaseException(e); + baseResponse.setStatus(HttpStatus.BAD_REQUEST.value()); + return baseResponse; } @ExceptionHandler(HttpMessageNotReadableException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public JsonResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); - jsonResult.setMsg("Required request body is missing"); - return jsonResult; + public BaseResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { + BaseResponse baseResponse = handleBaseException(e); + baseResponse.setStatus(HttpStatus.BAD_REQUEST.value()); + baseResponse.setMessage("Required request body is missing"); + return baseResponse; } @ExceptionHandler(NoHandlerFoundException.class) @ResponseStatus(HttpStatus.BAD_GATEWAY) - public JsonResult handleNoHandlerFoundException(NoHandlerFoundException e) { - JsonResult jsonResult = handleBaseException(e); + public BaseResponse handleNoHandlerFoundException(NoHandlerFoundException e) { + BaseResponse baseResponse = handleBaseException(e); HttpStatus status = HttpStatus.BAD_GATEWAY; - jsonResult.setCode(status.value()); - jsonResult.setMsg(status.getReasonPhrase()); - return jsonResult; + baseResponse.setStatus(status.value()); + baseResponse.setMessage(status.getReasonPhrase()); + return baseResponse; } @ExceptionHandler(HaloException.class) - public ResponseEntity handleHaloException(HaloException e) { - JsonResult jsonResult = handleBaseException(e); - jsonResult.setCode(e.getStatus().value()); - jsonResult.setResult(e.getErrorData()); - return new ResponseEntity<>(jsonResult, e.getStatus()); + public ResponseEntity handleHaloException(HaloException e) { + BaseResponse baseResponse = handleBaseException(e); + baseResponse.setStatus(e.getStatus().value()); + baseResponse.setData(e.getErrorData()); + return new ResponseEntity<>(baseResponse, e.getStatus()); } @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public JsonResult handleGlobalException(Exception e) { - JsonResult jsonResult = handleBaseException(e); + public BaseResponse handleGlobalException(Exception e) { + BaseResponse baseResponse = handleBaseException(e); HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR; - jsonResult.setCode(status.value()); - jsonResult.setMsg(status.getReasonPhrase()); - return jsonResult; + baseResponse.setStatus(status.value()); + baseResponse.setMessage(status.getReasonPhrase()); + return baseResponse; } - private JsonResult handleBaseException(Throwable t) { + private BaseResponse handleBaseException(Throwable t) { Assert.notNull(t, "Throwable must not be null"); log.error("Captured an exception", t); - JsonResult jsonResult = new JsonResult(); - jsonResult.setMsg(t.getMessage()); + BaseResponse baseResponse = new BaseResponse<>(); + baseResponse.setMessage(t.getMessage()); if (log.isDebugEnabled()) { - jsonResult.setDevMsg(ExceptionUtils.getStackTrace(t)); + baseResponse.setDevMessage(ExceptionUtils.getStackTrace(t)); } - return jsonResult; + return baseResponse; } }