我正在玩并将 Spring MVC REST 项目转换为使用 Jersey,并在我的一个类中使用注释
@ExceptionHandler(HttpMessageNotReadableException.class)
它将在 XML 消息的反序列化期间捕获任何异常。通过这种方式,我可以检测到用户何时在 POST 请求中发送了错误的 XML,并返回 XML 错误响应,而不是 400/500 标准 HTML 错误页面。
泽西岛有类似的东西吗?我尝试创建一个异常映射类
@Provider
public class HttpMessageNotReadableException
implements ExceptionMapper<org.xml.sax.SAXNotRecognizedException> {
但这似乎没有捕捉到任何即将到来的错误,就在我从资源类内部抛出异常时。
所以我想让我的方法获取字符串并进行反序列化并捕获任何错误:
@POST
@Path("/product")
public Response createProduct(String createRequest) {
try {
// de-serialize
// do work ...
} catch ...
代替
@POST
@Path("/product")
public Response createProduct(CreateProduct createRequest) {
// do work ...
但这似乎不对,只会用相同的错误检查污染我所有的课程。
我还阅读了有关使用实现我自己的阅读器的信息
@Provider
class MyXmlReader implements MessageBodyReader {
但这似乎是在重新发明轮子,因为 JAXB 已经在进行反序列化,我只想抓住错误。
任何人都知道是否有更好的方法来捕获糟糕的传入 XML?