我如何注册一个包罗万象的 ExceptionMapper<Exception>
确实如此 不是 拦截 WebApplicationException
哪个 Jersey 提供特殊处理?
更新 :我提交了此功能请求:http://java.net/jira/browse/JERSEY-1607
最佳答案
我最终注册了一个 ExceptionMapper:
import com.google.inject.Singleton;
import com.sun.jersey.api.container.MappableContainerException;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
/**
* @author Gili Tzabari
*/
@Provider
@Singleton
public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException>
{
@Override
public Response toResponse(RuntimeException e)
{
if (e instanceof WebApplicationException)
{
// WORKAROUND: Attempt to mirror Jersey's built-in behavior.
// @see http://java.net/jira/browse/JERSEY-1607
WebApplicationException webApplicationException = (WebApplicationException) e;
return webApplicationException.getResponse();
}
// Jetty generates a log entry whenever an exception is thrown. If we don't register an
// ExceptionMapper, Jersey will log the exception a second time.
throw new MappableContainerException(e);
}
}
关于Jersey:如何注册一个省略了一些子类的 ExceptionMapper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716793/