在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"
。
有没有办法摆脱跟踪字段?
答案 0 :(得分:28)
打开application.properties
并添加以下行:
server.error.include-stacktrace=never
答案 1 :(得分:1)
如果您的依赖项中包含“ spring-boot-devtools”,则似乎存在“ trace”字段。 排除devtools之后,我在输出中看不到这样的痕迹。
希望这会有所帮助。
答案 2 :(得分:1)
devtools将属性server.error.include-stacktrace设置为始终。
您可以保留devtools,但删除跟踪,并在应用程序中添加以下内容。yml:-
server:
error:
include-stacktrace: on-trace-param
答案 3 :(得分:1)
我知道我要参加聚会很晚,但是最近我遇到了这种情况,并采用了另一种解决方案,因为上述解决方案均不适用于我的情况。
我正在使用Spring-boot-devtools
,它会自动设置 server.error.include-stacktrace=always
因此,我通过覆盖如下所示的异常类中的fillInStackTrace
方法来抑制堆栈跟踪。
public class DuplicateFoundException extends RuntimeException {
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}
ps1:我推荐了this条
。ps2:您还可以尝试在其他答案中尝试以下建议的解决方案:
(在我的情况下,这些都不起作用)
如果您使用的是application.properties
文件,请在属性文件中添加以下行。
server.error.include-stacktrace=on_trace_param
如果您使用的是application.yml
文件,请在yml文件中添加以下行。
server:
error:
include-stacktrace: on_trace_param