我使用的是Sping Boot 1.3.X,并具有以下内容:
@RestController
@RequestMapping(path = "/foo")
public class FooController {
@RequestMapping(method = RequestMethod.GET, params = { "fooBar" })
public Collection<Entry> firstFoo() {
//Do something
}
@RequestMapping(method = RequestMethod.GET, params = { "anotherFooBar" })
public Collection<Entry> secondFoo() {
//Do something other
}
}
当传递错误的参数时,会引发以下异常:
{
"error": "Bad Request",
"exception": "org.springframework.web.bind.UnsatisfiedServletRequestParameterException",
"message": "Parameter conditions \"fooBar\" OR \"anotherFooBar\" not met for actual request parameters: elementalFormulae={C11}",
"path": "/foo",
"status": 400,
"timestamp": 1455287433961
}
然后我创建了一个ExceptionHandler
,如下所示:
@ControllerAdvice
public class ExcptionController {
@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Invalid parameter")
@ExceptionHandler(UnsatisfiedServletRequestParameterException.class)
private void foo() {
//Log exception
}
}
这会引发以下异常:
{
"error": "Bad Request",
"exception": "org.springframework.web.bind.UnsatisfiedServletRequestParameterException",
"message": "Invalid parameter",
"path": "/api/foo",
"status": 400,
"timestamp": 1455287904886
}
是否可以从JSON
表示中排除 exception 字段?
3条答案
按热度按时间oo7oh9g91#
您可以在控制器建议中获取 * 错误属性 *,然后只保留 * 可公开字段 *。如下所示:
i2loujxw2#
对于那些使用 Spring Boot 2.x.
自2.0.0版起,ErrorAtturbutes的预设实作为DefaultErrorAttributes。
DefaultErrorAttributes尽可能提供异常错误堆栈跟踪。通过设置以下项可以从响应中删除此字段:
zbdgwd5y3#
我已经解决了这个bean风格的问题。在我的案例中,将下面的bean定义添加到REST层配置中,替换使用的
ErrorAttributes
,在没有任何异常处理运行时代码的情况下解决了这个问题。