Как изменить ErrorAttributes ResponseStatusException?

Как я могу изменить атрибуты ошибок, которые появляются при бросании ResponseStatusException?

Особенно я хочу скрыть типы exception, error и status в json, но только во время производства.

    @RestController
    public class MyController {
       @GetMapping("/test")
       public Object get() {
          throw new org.springframework.web.server.ResponseStatusException(
                 HttpStatus.Forbidden, "some message");
       }
    }

Результат:

{
    "timestamp": "2018-11-06T12:16:50.111+0000",
    "status": 403,
    "error": "Forbidden",
    "exception": "org.springframework.web.server.ResponseStatusException",
    "message": "some message",
    "path": "/test"
}

Я полагаю, у вас есть несколько профилей, таких как: dev, prod ... Кроме того, вы не используете Spring Boot.

user10527814 06.11.2018 13:29

Да, у меня несколько профилей.

membersound 06.11.2018 13:31

Могу я вас еще раз спросить: не использовать Spring Boot?

user10527814 06.11.2018 13:37

Извините, да, я тоже использую пружинный ботинок. Добавил тег.

membersound 06.11.2018 13:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
4
2 950
1

Ответы 1

Его настраивают с помощью DefaultErrorAttributes

public DefaultErrorAttributes(boolean includeException)

Create a new DefaultErrorAttributes instance.

Parameters:

includeException - whether to include the "exception" attribute

Обратите внимание, что по умолчанию

public DefaultErrorAttributes()

Create a new DefaultErrorAttributes instance that does not include the "exception" attribute.

См. пример ошибки настройки

Значит, я бы переопределил DefaultErrorAttributes, errorAttributes.remove("path") и т. д.?

membersound 06.11.2018 13:32

@membersound Или позвоните в Map<String, Object> errorAttributes = super.getErrorAttributes(requestAttributes, false);

user7294900 06.11.2018 13:35

@membersound IMO, этот ответ явно решает проблему: создайте реализацию DefaultErrorAttributes для каждого профиля.

user10527814 06.11.2018 13:43

Другие вопросы по теме