В моем контроллере 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" с вложенным исключением.
Есть ли способ избавиться от поля трассировки?




Кажется, поле «trace» присутствует, если у вас есть «spring-boot-devtools» в ваших зависимостях. Я не вижу таких следов в своих выводах после исключения devtools.
Надеюсь, это поможет.
Его можно было настроить только в application.properties с помощью «server.error.include-stacktrace=never», как указано в ответе @KimchiMan.
@aschmid Я работаю над добавлением свойства server.error.include-stacktrace=never. Спасибо!
spring-boot-devtools устанавливает для свойства server.error.include-stacktrace значение всегда.
Вы можете сохранить devtools, но удалить трассировку со следующим в вашем application.yml:
server:
error:
include-stacktrace: on_trace_param
Откройте application.properties и добавьте строку ниже:
server.error.include-stacktrace=never
Просто, легко, точно!
Работал для меня, спасибо
Я знаю, что опаздываю на вечеринку, но недавно я столкнулся с этим сценарием и решил его с помощью другого решения, так как ни одно из вышеперечисленных решений не сработало в моем случае.
Я использую 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 указал, что значение недействительно
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
Да, поле "trace" пропало без devtools, спасибо!