Удалить поле «трассировка» из ResponseStatusException

В моем контроллере spring я возвращаю ResponseStatusException, если объект не найден, например:

@GetMapping("/categories/{id}")
  public ResponseEntity<Category> getCategoryById(@PathVariable(value = "id") String id) {
    try {
      return new ResponseEntity<Category>(categoryService.findById(id), HttpStatus.OK);
    } catch (CategoryNotFoundException ex) {
      throw new ResponseStatusException(HttpStatus.NOT_FOUND, ex.getMessage());
    }
  }

Я ожидаю, что ответ будет примерно таким:

{
    "timestamp": "2019-02-22T12:25:29.913+0000",
    "status": 404,
    "error": "Not Found",
    "message": "could not find category with ID: XYZ'.",
    "path": "/categories/XYZ"
}

Но ответ также включает длинное поле "trace" с вложенным исключением.
Есть ли способ избавиться от поля трассировки?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
27
0
15 257
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Кажется, поле «trace» присутствует, если у вас есть «spring-boot-devtools» в ваших зависимостях. Я не вижу таких следов в своих выводах после исключения devtools.

Надеюсь, это поможет.

Да, поле "trace" пропало без devtools, спасибо!

Pabi 28.02.2019 16:30

Его можно было настроить только в application.properties с помощью «server.error.include-stacktrace=never», как указано в ответе @KimchiMan.

aschmid 15.04.2020 22:36

@aschmid Я работаю над добавлением свойства server.error.include-stacktrace=never. Спасибо!

Carlos Alberto Gonzalez 26.06.2020 23:56

spring-boot-devtools устанавливает для свойства server.error.include-stacktrace значение всегда.

Вы можете сохранить devtools, но удалить трассировку со следующим в вашем application.yml:

server:
  error:
    include-stacktrace: on_trace_param

Откройте application.properties и добавьте строку ниже:

server.error.include-stacktrace=never

Просто, легко, точно!

Rigoxls 10.07.2020 02:57

Работал для меня, спасибо

Shardendu 24.07.2021 10:45

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

Я использую Spring-boot-devtools, и он автоматически устанавливает server.error.include-stacktrace=always

Итак, я подавил трассировку стека, переопределив метод fillInStackTrace в вашем классе исключений, как показано ниже.

public class DuplicateFoundException extends RuntimeException {
    @Override
    public synchronized Throwable fillInStackTrace() {
        return this;
    }
}

ps1: Я сослался на статью это.

ps2: вы также можете попробовать следующие предлагаемые решения в других ответах:

(Ни один из них не работал в моем случае)

если вы используете файл application.properties, добавьте следующую строку в свой файл свойств.

server.error.include-stacktrace=on_trace_param

если вы используете файл application.yml, добавьте следующую строку в свой файл yml.

server:
  error:
    include-stacktrace: on_trace_param

это сработало для server.error.include-stacktrace=ON_PARAM

когда я попробовал on_trace_param, Eclipse указал, что значение недействительно

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 04.12.2021 10:32

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