2014-06-12 4 views
5

के साथ जेसन पोस्ट लॉगिंग मैं एक स्थिर ढांचे में JSON पोस्ट लॉग करने का एक तरीका ढूंढ रहा हूं।रीस्टेसी

मैं पोस्ट शरीर लॉग इन करने की फ़ाइल लॉग इन करने की क्या ग्राहक मेरे लिए भेज रहा है देखना पसंद woul।

वहाँ किसी भी इंटरसेप्टर या इसी तरह की है कि मैं उपयोग कर सकते हैं कुछ है, मैं PreProcessInterceptor के लिए एक उदाहरण पाया है लेकिन ऐसा लगता है कि यह अब मान्य नहीं है लग रहा है।

मैं resteasy 3.0.8

उत्तर

6

उपयोग कर रहा हूँ तुम एक 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 विधि मीडिया प्रकार, जैसे की खाता मानदंडों में ले जाता है:

2

lefloh के उत्कृष्ट उत्तर के पूरक के रूप में, मैं की जगह सुझाव देते हैं। charset = UTF-8, और lefloh के इरादे के अनुसार कुछ परिदृश्यों में काम नहीं करता है। isCompatible मीडिया प्रकार के केवल प्रकार और उप प्रकार की तुलना करता है और इस मामले में अधिक उपयुक्त है।

पीएस। मुझे पता है, इस पोस्ट को टिप्पणी के रूप में रखा जाना चाहिए, लेकिन मेरे पास ऐसा करने के लिए प्रतिष्ठा का पर्याप्त स्तर नहीं है। मैंने lefloh जवाब भी संपादित किया लेकिन कुछ php और ios लोगों ने इसे खारिज कर दिया।

संबंधित मुद्दे