उपयोग कर रहा हूँ तुम एक ContainerRequestFilter उपयोग कर सकते हैं: इसके बजाय विधि और सामग्री प्रकार के लिए जाँच की
@Provider
public class LogFilter implements ContainerRequestFilter {
private Logger LOG = LoggerFactory.getLogger(LogFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
if (!"POST".equals(requestContext.getMethod())
|| !MediaType.APPLICATION_JSON_TYPE.equals(requestContext.getMediaType())
|| requestContext.getEntityStream() == null) {
return;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(requestContext.getEntityStream(), baos);
byte[] bytes = baos.toByteArray();
LOG.info("Posted: " + new String(bytes, "UTF-8"));
requestContext.setEntityStream(new ByteArrayInputStream(bytes));
}
}
आप भी आप केवल जहां जरूरत @NameBinding प्रति इस फिल्टर रजिस्टर कर सकते हैं यह।
नोट: यह सरल उदाहरण अनुरोध के इनपुटस्ट्रीम की प्रतिलिपि बनाता है ताकि इसे दो बार पढ़ा जा सके (शायद एक प्रदर्शन समस्या)।
!MediaType.APPLICATION_JSON_TYPE.equals(requestContext.getMediaType())
साथ
!MediaType.APPLICATION_JSON_TYPE.isCompatible(requestContext.getMediaType())
equals विधि मीडिया प्रकार, जैसे की खाता मानदंडों में ले जाता है: