使用ExceptionMapper映射UnsupportedMediaTypeException

时间:2012-04-25 23:32:15

标签: spring rest jax-rs

是否有一个地方清楚地记录了我无法使用javax.ws.rs.ext.ExceptionMapper映射UnsupportedMediaTypeException(因为它是一个非常简单的异常,而不是自定义应用程序异常)?

我想向我的客户证明这一点。或者我想做的另一件事是将此异常映射到可以在客户端获取以显示错误的响应。现在,当抛出此异常时,它不会向应用程序提供任何信息,因为应用程序突然结束。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

您可以映射此例外。为什么不?你有错误吗?

此代码应该完成工作

@Provider
public class EJBExceptionMapper implements ExceptionMapper<org.jboss.resteasy.spi.UnsupportedMediaTypeException>{

  Response toResponse(org.jboss.resteasy.spi.UnsupportedMediaTypeException exception) {
    return Response.status(415).build();
  }

}

不要忘记在Spring配置文件中声明该提供程序。

如果要向客户端创建类

提供更多信息
@XmlRootElement
public class Error{
   private String message;
   //getter and setter for message field
}

然后你可以

@Provider
public class EJBExceptionMapper implements ExceptionMapper<org.jboss.resteasy.spi.UnsupportedMediaTypeException>{

  Response toResponse(org.jboss.resteasy.spi.UnsupportedMediaTypeException exception) {
    Error error = new Error();
    error.setMessage("Whatever message you want to send to user");
    return Response.entity(error).status(415).build();
  }

}

如果您不想使用错误实体,只需将字符串传递给Response.entity()电话。

如果你想捕获应用程序中抛出的任何内容,请创建通用异常映射器:

@Provider
public class ThrowableMapper implements ExceptionMapper<Throwable> {

    public Response toResponse(Throwable t) {

        ErrorDTO errorDTO = new ErrorDTO(code);
        return Response.status(500).build();
    }
}