Jersey:如何注册省略某些子类的ExceptionMapper?

Gil*_*ili 4 jax-rs jersey

如何注册一个包罗万象的ExceptionMapper<Exception>,它拦截WebApplicationException为其提供新泽西特殊处理?

更新:我提交了此功能请求:http://java.net/jira/browse/JERSEY-1607

Gil*_*ili 8

我最终注册了一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)