你可以注射
ContainerRequest
ExceptionMapper
javax.inject.Provider
@Provider
public class Mapper implements ExceptionMapper<ConstraintViolationException> {
@Inject
private javax.inject.Provider<ContainerRequest> requestProvider;
@Override
public Response toResponse(ConstraintViolationException ex) {
ContainerRequest request = requestProvider.get();
}
}
(这也适用于构造函数参数注入,而不是字段注入。)
在
容器请求
,您可以使用
getHeaderString()
或
getHeaders()
. 如果你想得到主体,你需要做一点小的修改,因为实体流已经被Jersey在mapper到达时读取了。所以我们需要实施
ContainerRequestFilter
缓冲实体。
public class EntityBufferingFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
ContainerRequest request = (ContainerRequest) containerRequestContext;
request.bufferEntity();
}
}
全部的
DynamicFeature
只在使用bean验证(或
Name Binding
一旦注册了这个过滤器,就可以使用
ContainerRequest#readEntity(Class)
. 使用这种方法就像在客户端使用
Response#readEntity()
. 所以对于类,如果你想保持它的泛型,你可以使用
String.class
InputStream.class
InputStream
一根绳子。
ContainerRequest request = requestProvider.get();
String body = request.readEntity(String.class);