Всем привет. Есть у меня ContainerRequestFilter, в котором я хочу вычитать тело запроса и из полученного xml сформировать объект и прокинуть его дальше в запросе. Проблема в том, что как бы я не изменял этот объект, непосредственно в Jersey Resource, а именно в HttpServletRequest я уже не могу получить сформированный объект. Кто нибудь сталкивался с этим ? Пример: Код | @Provider public class UnmarshalEntityFilter implements ContainerRequestFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(UnmarshalEntityFilter.class);
@Override public ContainerRequest filter(ContainerRequest containerRequest) {
try { final String xml = getRequestBody(containerRequest); // Parse xml to object // Тут нужно установить параметр в containerRequest, что бы я потом мог его получить } catch (UnsupportedSystemRecharge ex){ LOGGER.error(ex.getMessage(), ex); }
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); }
} }
|
Код | @POST @Path("/create") @Loggable @Produces(MediaType.APPLICATION_XML) @Consumes(MediaType.APPLICATION_XML) public Response handler(final @Context HttpServletRequest context){ System.out.println(context.getParameter("entity")); // вернет null System.out.println(context.getAttribute("entity")); // вернет null }
|
Кто нибудь сталкивался с таким ?
|