Tôi có một JAX-RS đăng lọc để đăng nhập request và response chi tiết, một cái gì đó như thế này:đọc JAX-RS cơ thể InputStream hai lần
public class LoggingFilter implements ContainerRequestFilter, ContainerResponseFilter {
@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
...
String body = getBody(request);
...
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("request: {}", httpRequest);
}
}
}
Phương pháp getBody()
đọc nội dung cơ thể từ InputStream
nhưng tôi cần phải làm một số mẹo vì tôi không thể đặt lại luồng này. Nếu không có mẹo nhỏ này, phương pháp nghỉ ngơi của tôi luôn nhận được nội dung cơ thể yêu cầu trống:
private String getBody(final ContainerRequestContext requestContext) {
try {
byte[] body = IOUtils.toByteArray(requestContext.getEntityStream());
InputStream stream = new ByteArrayInputStream(body);
requestContext.setEntityStream(stream);
return new String(body);
} catch (IOException e) {
return null;
}
}
Có cách nào tốt hơn để đọc nội dung cơ thể không?
Tham chiếu phần Bộ chặn và Bộ lọc tại [link] (https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/en/part1/chapter12 /reader_and_writer_interceptors.html) – Gautam