Создание HTTPMessageConverter с текстовым процессором с автопроводкой - PullRequest
0 голосов
/ 06 июня 2018

Я хочу создать RuntimeException с настройкой HTTP Status и Text.Существует textService, который создает текст.

Я прочитал так много потоков, но все еще не получил его.

Я не могу использовать autowired textService в конструкторе, как это:

    @Autowired
    public myException(String param) {
        this.param = ts.getMsg(param);
    }

, потому что во время строительства у меня нет автопроводного объекта.Это вполне понятно.В некоторых темах, которые я читаю, я должен перезаписать функцию getMessage, которая кажется мне вполне логичной и приводит к следующему:

@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class myException extends RuntimeException {

    @Autowired
    private transient textService ts;

    private String param = "default";

    public myException(String param) {
        this.param = param;
    }

    @Override
    public String getMessage() {
        return ts.getMsg(param);
    }

}

Но, бросая ее

throw new myException("foo");

, я получаю страницу ошибок справильный статус, но без текста.

Это происходит не в контроллере, а в HTTPMessageConverter, поэтому я не могу напрямую получить доступ к объекту ответа.

Использование Spring WebMVC 4.3.4.RELEASE.

Другие идеи, которые у меня были (но я не понял, работает):

  • Создание нового исключения в методе @ PostContruct-Method
  • Как-то получить доступаннотация-причина для класса

Потоки, которые я прочитал (и многое другое)

Скорее всего, решение где-то есть, но я, очевидно, слеп, поэтому, может быть, какой-нибудь дружелюбный человек может открыть мне глаза.

1 Ответ

0 голосов
/ 06 июня 2018

попробуйте использовать @ControllerAdvice и в сочетании с @ ExceptionHandler.

например,

@ Открытый класс ControllerAdvice ExceptionHandlerClass {

@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
@ExceptionHandler(myException.class)
public ResponseEntity<String> handlerMyException(myException me) {
    return new ResponseEntity(me.getMessage(), HttpStatus.UNAUTHORIZED);
}

}

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