 <p>This question is a bit older, but still the answer may help others. My Example also depends on Commons-Io.</p> <p>You can create a ContainerRequestFilter and use TeeInputStream to proxy/copy the original InputStream:</p> <pre><code>@Provider @Priority(Priorities.ENTITY_CODER) public class CustomRequestWrapperFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { ByteArrayOutputStream proxyOutputStream = new ByteArrayOutputStream(); requestContext.setEntityStream(new TeeInputStream(requestContext.getEntityStream(), proxyOutputStream)); requestContext.setProperty("ENTITY_STREAM_COPY", proxyOutputStream); } } </code></pre> <p>And use @Inject with javax.inject.Provider in your ExceptionMapper to get the ContainerRequest injected.</p> <p>The ExceptionMapper would look like this:</p> <pre><code>@Provider public class BaseExceptionMapper implements ExceptionMapper&lt;Exception&gt; { @Inject private javax.inject.Provider&lt;ContainerRequest&gt; containerRequestProvider; @Override public Response toResponse(Exception exception) { ByteArrayOutputStream bos = (ByteArrayOutputStream) containerRequestProvider .get().getProperty("ENTITY_STREAM_COPY"); String requestBody = bos.toString(); ... } } </code></pre> <p>When I have also used the @Component annotation my ExceptionMapper was not used. I think that @Provider is sufficient.</p>