使用 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 或更高版本
我正在使用 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 或更高版本