使用 Bean 验证时防止内部服务器错误

Prevent a InternalServerErrror while using BeanValidation

我正在使用 BeanValidation(与 DropWizzard)。现在,如果一个表单包含一个用@NotEmpty 注释的字段,但它是空的,我将得到一个状态代码为 500 的 InternalServer ErrorException。 我想为此记录一个 RuntimeException 并将用户转发到一个错误页面。

是否可以在一个地方捕获所有 ValidationException,记录它们并做一些类似转发用户的事情?

您可以为 ValidationException 构建自己的异常映射器。 Jersey 有自己的 ValidationExceptionMapper 实现,如果元素是一个经过验证的参数,它将 return 一个错误的请求,或者如果验证发生在 return 值上,则会出现内部服务器错误。最新版本的 Dropwizard 应该默认配置这些映射器。

要构建您自己的异常映射器,您应该实现接口 javax.ws.rs.ext.ExceptionMapper 并将其注册到 Dropwizard 的 jersey 上下文中,即environment.jersy().register(MyExceptionMapper.class)如果您使用 Dropwizard 0.8 或更高版本