2012-04-25 64 views
1

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

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

任何帮助,将不胜感激。

谢谢

回答

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(); 
    } 
} 
+0

我发现,如果异常的,即如果我作为一个开发者选择抛出的异常,业务逻辑抛出映射器的作品。但是,如果在内部抛出相同的异常,如果@Consumes注释未能验证内容类型,则不会调用映射器。 – Mustafa 2012-05-08 04:44:48

+0

尝试为Throwable类创建异常映射器(请参阅更新的答案) – 2012-05-08 07:37:54