Я работаю над интернационализацией в существующем загрузочном проекте Spring, у меня возникли проблемы при попытке выяснить, могут ли ошибки загрузки по умолчанию для пружин / пружин автоматически преобразовываться.
У меня это работает для MethodArgumentNotValidException
Spring каким-то образом преобразует его в язык, указанный в заголовке запроса
@ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
public ResponseEntity<Object> handleBadRequest(MethodArgumentNotValidException ex, WebRequest request) {
Locale locale = request.getLocale();
ApiResponseEnvelope envelope = new ApiResponseEnvelope(false);
BindingResult result = ex.getBindingResult();
List<FieldError> errors = result.getFieldErrors();
for (FieldError err : errors) {
ApiError ae = new ApiError(messageSource.getMessage(err, locale), 44);
envelope.addError(ae);
}
return new ResponseEntity(envelope, HttpStatus.BAD_REQUEST);
}
Ответ:
{
"success": false,
"result": null,
"errors": [
{
"message": "ne peut pas être nul",
"code": 44
},
{
"message": "ne peut pas être nul",
"code": 44
},
.
.
.
Но теперь для другихисключения, которые проходят через обработчик @ExceptionHandler(Exception.class)
, он возвращает исключение как английский.Я считаю, что каким-то образом у Spring должен быть способ возврата этих общих ошибок на локализованном языке.
Ниже приведен единственный способ преобразования исключения, обработанного обработчиком Exception.class
, - чтение из файла моих сообщений.Есть ли способ справиться с этими общими ошибками?
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleExceptions(Exception ex, Locale locale) {
String errorMessage = attemptToFecthMessageForCode(ex,locale);
//messageSource.getMessage(ExceptionProperty.UNEXPECTED_ERROR.getValue(), new Object[]{ex}, locale);
//ex.printStackTrace();
return new ResponseEntity<>(new RestMessage(errorMessage), HttpStatus.INTERNAL_SERVER_ERROR);
}
public String attemptToFecthMessageForCode(Exception ex, Locale locale){
String msg = ex.getMessage();
try{
msg = messageSource.getMessage(ex.getMessage(), ex.getStackTrace(), locale);
}
catch (Exception e){
e.printStackTrace();
}
return msg;
}
Заранее спасибо!.