@ControllerAdvice(annotations = RepositoryRestController.class)public class GenericExceptionHandler { @Autowired private MessageSource messageSource; @ExceptionHandler //if you don't use Exception e in method you can remove it , live only Locale public ResponseEntity handle(Exception e, Locale locale) { String errorMessage = messageSource.getMessage("error.message", new Object[]{},locale); //set message or return it instead of exceptionMessageObject exceptionMessageObject.setMessage(exceptionMessageObject); return new ResponseEntity(exceptionMessageObject, new HttpHeaders(), httpStatus); }参见Spring
7.15.1使用MessageSource进行国际化
“我应该如何像创建一个Spring Data REST一样创建exceptionMessageObject?”
创建您自己的错误包装器,例如:
public class CustomError { private HttpStatus status; private String message; private Exception originalException;//if you need it // getter setter}“如何为不同的异常提供不同的消息?我是否应该创建一条长的if链来检查异常的类?”
创建解析器
private String resolveExceptionToMessage(Exception exceptio){ //or put in map<Exceptio,String error.message.type1> // String errorCode = map.get(excptio); //eturn messageSource.getMessage(errorCode , new Object[]{},locale); if(exceptio instanceof ....){ return messageSource.getMessage("error.message.type1", new Object[]{},locale); } return "";}或将方法与@ExceptionHandler({CustomException1.class}),@ExceptionHandler({CustomException1.class})....一起使用,并在每个方法中仅添加errror.pre,其他所有部分都相似
@ExceptionHandler({ CustomException1.class}) public ResponseEntity handleException1() { return createError(pre for this exceptio 1); } @ExceptionHandler({ CustomException2.class}) public ResponseEntity handleException2() { return createError(pre for this exceptio 2); } private ResponseEntity createError(String errorCode ) { CustomError customError = new CustomError(); customError.setHttpStatus(HttpStatus.BAD_REQUEST); String errorMessage = messageSource.getMessage(errorCode , new Object[]{},locale); customError.setMessage(errorMessage ); customError.setOriginalException(e); return new ResponseEntity<Object>(customError, new HttpHeaders(), customError.getStatus()); }如何设置httpStatus?我想将默认状态Spring Data REST用于常见异常…
public ResponseEntity handle(Exception e, Locale locale) { CustomError customError = new CustomError(); customError.setHttpStatus(HttpStatus.BAD_REQUEST); customError.setMessage(resolveExceptionToMessage(e)); customError.setOriginalException(e); return new ResponseEntity<Object>(customError, new HttpHeaders(), customError.getStatus());}


