Java 使用jersey在restful响应中返回XML验证失败信息的正确方法
我将jersey 2.19与自定义ContextResolver一起使用,因此 解组器是使用要验证的模式创建的。这个 然后在POST/PUT期间进行验证,如果失败,则 引发BadRequestException。客户端仅在响应中看到“BadRequest”。Java 使用jersey在restful响应中返回XML验证失败信息的正确方法,java,xml,validation,jaxb,jersey,Java,Xml,Validation,Jaxb,Jersey,我将jersey 2.19与自定义ContextResolver一起使用,因此 解组器是使用要验证的模式创建的。这个 然后在POST/PUT期间进行验证,如果失败,则 引发BadRequestException。客户端仅在响应中看到“BadRequest”。 此BadRequestException包含一个UnmarshaleException作为其原因,该原因又包含一个包含SAXParseException的链接XmlMarshaleException。 此SAXParseException最
此BadRequestException包含一个UnmarshaleException作为其原因,该原因又包含一个包含SAXParseException的链接XmlMarshaleException。 此SAXParseException最终保存我要返回给客户端的验证消息。
我想知道做这件事的正确方法是什么,因为挖掘异常链的原因和相关异常对我来说似乎不合适。
除了丑陋之外,它还依赖于实现,并且可能随着jersey/jaxb版本的变化而变化。所以我想要一个更清晰的解决方案 此外,我还尝试在我的
web.xml
文件中将\u RESPONSE中的ServerProperties.BV\u SEND\u ERROR\u设置为true,如下所示:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>package1:package2</param-value>
</init-param>
<init-param>
<param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
Jersey Web应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
包装1:包装2
jersey.config.beanValidation.enableOutputValidationErrorEntity.server
真的
但是仍然没有成功。我们还没有找到比从异常链中挖掘细节更好的解决方案。这很难看。断言您在自定义ContextResolver中调用解组器并启动解组,您可以在那里捕获异常,“挖掘”您的消息,并自己抛出具有给定消息的自定义异常。你无法摆脱挖掘,但你可以把它藏在这个地方。