一、接口接受Date参数,可以传入String类型
@ControllerAdvice
public class CommonDateAdvice {
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), false));
}
}
二、统一异常返回
2.1、异常返回主要实现
@ControllerAdvice
@ResponseBody
public class CommonExceptionAdvice extends BaseExceptionAdvice {
private Logger logger = LogManager.getLogger(this.getClass());
/**
* 401 - Bad Request
*/
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ExceptionHandler(TokenValidationException.class)
public Object missingTokenException(TokenValidationException e,
WebRequest request) {
logger.error(e);
return renderError(HttpStatus.BAD_REQUEST, request, "required_parameter_is_not_present");
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MissingServletRequestParameterException.class)
public Object handleMissingServletRequestParameterException(MissingServletRequestParameterException e,
WebRequest request) {
logger.error(e);
return renderError(HttpStatus.BAD_REQUEST, request, "required_parameter_is_not_present");
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public Object handleHttpMessageNotReadableException(HttpMessageNotReadableException e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.BAD_REQUEST, request, "could_not_read_json");
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e, WebRequest request) {
logger.error(e);
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = String.format("%s:%s", field, code);
return renderError(HttpStatus.BAD_REQUEST, request, message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(BindException.class)
public Object handleBindException(BindException e, WebRequest request) {
logger.error(e);
BindingResult result = e.getBindingResult();
FieldError error = result.getFieldError();
String field = error.getField();
String code = error.getDefaultMessage();
String message = String.format("%s:%s", field, code);
return renderError(HttpStatus.BAD_REQUEST, request, message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class)
public Object handleServiceException(ConstraintViolationException e, WebRequest request) {
logger.error(e);
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
ConstraintViolation<?> violation = violations.iterator().next();
String message = violation.getMessage();
return renderError(HttpStatus.BAD_REQUEST, request, message);
}
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(ValidationException.class)
public Object handleValidationException(ValidationException e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.BAD_REQUEST, request, "validation_exception");
}
/**
* 404 - Bad Request
*/
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(HttpException.class)
public Object notFoundPage(Exception e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.BAD_REQUEST, request, "not found page");
}
/**
* 405 - Method Not Allowed
*/
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public Object handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e,
WebRequest request) {
logger.error(e);
logger.error(request.getContextPath());
return renderError(HttpStatus.METHOD_NOT_ALLOWED, request, "request_method_not_supported");
}
/**
* 415 - Unsupported Media Type
*/
@ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public Object handleHttpMediaTypeNotSupportedException(Exception e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.UNSUPPORTED_MEDIA_TYPE, request, "content_type_not_supported");
}
/**
* 500 - Internal Server Error
*/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(MyException.class)
public Object handleServiceException(MyException e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.INTERNAL_SERVER_ERROR, request, e.getMessage());
}
/**
* 500 - Internal Server Error
*/
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(Exception.class)
public Object handleException(Exception e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.NOT_FOUND, request, e.getMessage());
}
/**
* 操作数据库出现异常:名称重复,外键关联
*/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(DataIntegrityViolationException.class)
public Object handleException(DataIntegrityViolationException e, WebRequest request) {
logger.error(e);
return renderError(HttpStatus.INTERNAL_SERVER_ERROR, request, "操作数据库出现异常:字段重复、有外键关联等");
}
}
2.2、基础类实现
public class BaseExceptionAdvice {
/**
* 失败
*
* @return {Object}
*/
public Object renderError(HttpStatus status, WebRequest request) {
Result result = new Result();
result.setSuccess(false);
result.setStatusValue(status.value());
result.setPath(request.getContextPath());
return result;
}
/**
* 失败
*
* @return {Object}
*/
public Object renderError(Integer status, String msg, String path) {
Result result = new Result();
result.setSuccess(false);
result.setStatusValue(status);
result.setMsg(msg);
result.setPath(path);
return result;
}
/**
* 失败
*
* @return {Object}
*/
public Object renderError(HttpStatus status, WebRequest request, String msg) {
Result result = new Result();
result.setSuccess(false);
result.setStatusValue(status.value());
ServletWebRequest req = (ServletWebRequest) request;
result.setPath(req.getRequest().getServletPath());
result.setMsg(msg);
return result;
}
}
网友评论