Deprecated JsonResult

pull/137/head
johnniang 2019-03-19 11:43:57 +08:00
parent b0b852a803
commit 66a0bbac26
4 changed files with 119 additions and 63 deletions

View File

@ -1,6 +1,9 @@
package cc.ryanc.halo.model.support; package cc.ryanc.halo.model.support;
import lombok.*; import lombok.*;
import org.springframework.http.HttpStatus;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
/** /**
* Global response entity. * Global response entity.
@ -12,14 +15,65 @@ import lombok.*;
@EqualsAndHashCode @EqualsAndHashCode
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class BaseResponse { public class BaseResponse<T> {
/**
* Response status.
*/
private Integer status; private Integer status;
/**
* Response message.
*/
private String message; private String message;
/**
* Response development message
*/
private String devMessage; 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 <T> BaseResponse<T> 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 <T> BaseResponse<T> 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 <T> data type
* @return base response with data
*/
public static <T> BaseResponse<T> ok(@NonNull T data) {
return new BaseResponse<>(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), data);
}
} }

View File

@ -15,6 +15,7 @@ import org.springframework.util.Assert;
* @date : 2018/5/24 * @date : 2018/5/24
*/ */
@Data @Data
@Deprecated
public class JsonResult { public class JsonResult {
/** /**

View File

@ -1,6 +1,6 @@
package cc.ryanc.halo.web.controller.base; 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.core.MethodParameter;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -27,17 +27,16 @@ public class CommonResultControllerAdvice extends AbstractMappingJacksonResponse
// Get return body // Get return body
Object returnBody = bodyContainer.getValue(); Object returnBody = bodyContainer.getValue();
if (returnBody instanceof JsonResult) { if (returnBody instanceof BaseResponse) {
// If the return body is instance of JsonResult // If the return body is instance of BaseResponse
JsonResult jsonResult = (JsonResult) returnBody; BaseResponse<?> baseResponse = (BaseResponse) returnBody;
response.setStatusCode(HttpStatus.resolve(jsonResult.getCode())); response.setStatusCode(HttpStatus.resolve(baseResponse.getStatus()));
return; return;
} }
// Normal return body // Wrap the return body
HttpStatus okStatus = HttpStatus.OK; BaseResponse<?> baseResponse = BaseResponse.ok(returnBody);
JsonResult jsonResult = new JsonResult(okStatus.value(), okStatus.getReasonPhrase(), returnBody); bodyContainer.setValue(baseResponse);
bodyContainer.setValue(jsonResult); response.setStatusCode(HttpStatus.valueOf(baseResponse.getStatus()));
response.setStatusCode(okStatus);
} }
} }

View File

@ -2,7 +2,7 @@ package cc.ryanc.halo.web.controller.base;
import cc.ryanc.halo.exception.HaloException; import cc.ryanc.halo.exception.HaloException;
import cc.ryanc.halo.logging.Logger; 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.ExceptionUtils;
import cc.ryanc.halo.utils.ValidationUtils; import cc.ryanc.halo.utils.ValidationUtils;
import org.springframework.dao.DataIntegrityViolationException; 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.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.NoHandlerFoundException;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* Exception handler of controller. * Exception handler of controller.
@ -33,102 +35,102 @@ public class ControllerExceptionHandler {
@ExceptionHandler(DataIntegrityViolationException.class) @ExceptionHandler(DataIntegrityViolationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleDataIntegrityViolationException(DataIntegrityViolationException e) { public BaseResponse handleDataIntegrityViolationException(DataIntegrityViolationException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<?> baseResponse = handleBaseException(e);
if (e.getCause() instanceof org.hibernate.exception.ConstraintViolationException) { if (e.getCause() instanceof org.hibernate.exception.ConstraintViolationException) {
jsonResult = handleBaseException(e.getCause()); baseResponse = handleBaseException(e.getCause());
} }
jsonResult.setMsg("Failed to validate request parameter"); baseResponse.setMessage("Failed to validate request parameter");
return jsonResult; return baseResponse;
} }
@ExceptionHandler(MissingServletRequestParameterException.class) @ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleMissingServletRequestParameterException(MissingServletRequestParameterException e) { public BaseResponse handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<?> baseResponse = handleBaseException(e);
jsonResult.setMsg(String.format("Missing request parameter, required %s type %s parameter", e.getParameterType(), e.getParameterName())); baseResponse.setMessage(String.format("Missing request parameter, required %s type %s parameter", e.getParameterType(), e.getParameterName()));
return jsonResult; return baseResponse;
} }
@ExceptionHandler(ConstraintViolationException.class) @ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleConstraintViolationException(ConstraintViolationException e) { public BaseResponse handleConstraintViolationException(ConstraintViolationException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<Set<ConstraintViolation<?>>> baseResponse = handleBaseException(e);
jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); baseResponse.setStatus(HttpStatus.BAD_REQUEST.value());
jsonResult.setMsg("Field validation error"); baseResponse.setMessage("Field validation error");
jsonResult.setResult(e.getConstraintViolations()); baseResponse.setData(e.getConstraintViolations());
return jsonResult; return baseResponse;
} }
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { public BaseResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<Map<String, String>> baseResponse = handleBaseException(e);
jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); baseResponse.setStatus(HttpStatus.BAD_REQUEST.value());
jsonResult.setMsg("Field validation error"); baseResponse.setMessage("Field validation error");
Map<String, String> errMap = ValidationUtils.mapWithFieldError(e.getBindingResult().getFieldErrors()); Map<String, String> errMap = ValidationUtils.mapWithFieldError(e.getBindingResult().getFieldErrors());
jsonResult.setResult(errMap); baseResponse.setData(errMap);
return jsonResult; return baseResponse;
} }
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { public BaseResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<?> baseResponse = handleBaseException(e);
jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); baseResponse.setStatus(HttpStatus.BAD_REQUEST.value());
return jsonResult; return baseResponse;
} }
@ExceptionHandler(HttpMessageNotReadableException.class) @ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
public JsonResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { public BaseResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<?> baseResponse = handleBaseException(e);
jsonResult.setCode(HttpStatus.BAD_REQUEST.value()); baseResponse.setStatus(HttpStatus.BAD_REQUEST.value());
jsonResult.setMsg("Required request body is missing"); baseResponse.setMessage("Required request body is missing");
return jsonResult; return baseResponse;
} }
@ExceptionHandler(NoHandlerFoundException.class) @ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(HttpStatus.BAD_GATEWAY) @ResponseStatus(HttpStatus.BAD_GATEWAY)
public JsonResult handleNoHandlerFoundException(NoHandlerFoundException e) { public BaseResponse handleNoHandlerFoundException(NoHandlerFoundException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<?> baseResponse = handleBaseException(e);
HttpStatus status = HttpStatus.BAD_GATEWAY; HttpStatus status = HttpStatus.BAD_GATEWAY;
jsonResult.setCode(status.value()); baseResponse.setStatus(status.value());
jsonResult.setMsg(status.getReasonPhrase()); baseResponse.setMessage(status.getReasonPhrase());
return jsonResult; return baseResponse;
} }
@ExceptionHandler(HaloException.class) @ExceptionHandler(HaloException.class)
public ResponseEntity<JsonResult> handleHaloException(HaloException e) { public ResponseEntity<BaseResponse> handleHaloException(HaloException e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse<Object> baseResponse = handleBaseException(e);
jsonResult.setCode(e.getStatus().value()); baseResponse.setStatus(e.getStatus().value());
jsonResult.setResult(e.getErrorData()); baseResponse.setData(e.getErrorData());
return new ResponseEntity<>(jsonResult, e.getStatus()); return new ResponseEntity<>(baseResponse, e.getStatus());
} }
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public JsonResult handleGlobalException(Exception e) { public BaseResponse handleGlobalException(Exception e) {
JsonResult jsonResult = handleBaseException(e); BaseResponse baseResponse = handleBaseException(e);
HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR; HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
jsonResult.setCode(status.value()); baseResponse.setStatus(status.value());
jsonResult.setMsg(status.getReasonPhrase()); baseResponse.setMessage(status.getReasonPhrase());
return jsonResult; return baseResponse;
} }
private JsonResult handleBaseException(Throwable t) { private <T> BaseResponse<T> handleBaseException(Throwable t) {
Assert.notNull(t, "Throwable must not be null"); Assert.notNull(t, "Throwable must not be null");
log.error("Captured an exception", t); log.error("Captured an exception", t);
JsonResult jsonResult = new JsonResult(); BaseResponse<T> baseResponse = new BaseResponse<>();
jsonResult.setMsg(t.getMessage()); baseResponse.setMessage(t.getMessage());
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
jsonResult.setDevMsg(ExceptionUtils.getStackTrace(t)); baseResponse.setDevMessage(ExceptionUtils.getStackTrace(t));
} }
return jsonResult; return baseResponse;
} }
} }