java – 如何从泽西过滤器请求(ContainerRequestFilter)添加参数来请求
|
我用泽西春天.我有Jersey过滤器,它实现了ContainerRequestFilter,我需要在我的球衣资源中传输对象. 例如: @Provider
public class UnmarshalEntityFilter implements ContainerRequestFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(UnmarshalEntityFilter.class);
@Override
public ContainerRequest filter(ContainerRequest containerRequest) {
final String xml = getRequestBody(containerRequest);
// Parse this xml to Object
// How I can add this Object to my request and get from Jersey Resource ?
return containerRequest;
}
private String getRequestBody(ContainerRequest request) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = request.getEntityInputStream();
StringBuilder sb = new StringBuilder();
try {
if (in.available() > 0) {
ReaderWriter.writeTo(in,out);
byte[] requestEntity = out.toByteArray();
sb.append(new String(requestEntity,"UTF-8"));
}
return sb.toString();
} catch (IOException ex) {
throw new ContainerException(ex);
}
}
} 解决方法请参阅ContainerRequest#setProperty(String,Object)方法
所以你可以简单地打电话 final String xml = getRequestBody(containerRequest);
containerRequest.setProperty("xml",xml);
然后在你的处理程序中注入HttpServletRequest并使用HttpServletRequest#getAttribute(“xml”)访问它. 使用Jersey 1.17,相应的方法是 您可以从 @Context
private HttpContext httpCtx
...
final String xml = httpCtx.getProperties().get("xml")
另外,请注意消耗请求InputStream.如果堆栈中的某些其他组件也需要从流中读取,则它将失败. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
