Интернационализация загрузки Java Spring для сообщений об ошибках по умолчанию Spring - PullRequest
0 голосов
/ 04 декабря 2018

Я работаю над интернационализацией в существующем загрузочном проекте 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;
}

Заранее спасибо!.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...