2014-10-11 12 views
5

पर भेजे गए अनुरोध का निकाय पढ़ें मुझे ड्रॉपवॉज़र सेवा में भेजे गए जेसन अनुरोध की सामग्री को पढ़ने की आवश्यकता है। संदेश को ड्रॉपवार्ड द्वारा एनोटेटेड ओबब्जेक्ट में क्रमबद्ध किया गया है जो विधि (PaymentMessage ऑब्जेक्ट) का इनपुट है। मैंने विधि के इनपुट पैरामीटर के रूप में HttpServletRequest जोड़ा है। HttpServletRequest शून्य नहीं है, लेकिन विधि HttpServletRequest#getInputStream() एक गैर-शून्य अभी तक खाली स्ट्रीम देता है।एक ड्रॉपविज़ार्ड सेवा

कर्ल: curl -i -X POST -H'Content-Type: application/json; charset=UTF-8' \ http://localhost:8080/NL/users/555855/payments -d '{"eventId":"110099110099","hznHouseholdId":"1234567_nl","ipAddress":"123.123.123.123","transactionId":"799ef666-e09c-8350-247b-c466997714ad","transactionDate":"2014-09-29T16:56:21Z","appName":"Flappy Bird"}'

कोड:

@POST 
@Path("/{countryCode}/users/{customerId}/payments") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response processPaymentAction(
     @Context final HttpServletRequest request, 
     @Nonnull @PathParam("countryCode") final String countryCode, 
     @Nonnull @PathParam("customerId") final String customerId, 
     @Valid PaymentMessage paymentMessage) 
     throws IOException, ServletException { 

    LOG.debug("Request "+request.toString()); 
    final ByteSource byteSource = new ByteSource() { 
     @Override 
     public InputStream openStream() throws IOException { 
      return request.getInputStream(); 
     } 
    }; 
    LOG.debug("charset "+request.getCharacterEncoding()); 
    final String contents = byteSource.asCharSource(Charset.forName(request.getCharacterEncoding())).read(); 
    LOG.debug("contents: "+contents); 
    return Response.status(Response.Status.ACCEPTED).build(); 
} 
+0

पोस्ट बॉडी को भुगतान संदेश में मैप किया जाना चाहिए जैसा आपने कहा था। आप अनुरोध ऑब्जेक्ट से बाहर निकलने का प्रयास कर रहे हैं जो पहले से ही पीओजेओ का हिस्सा नहीं है कि जैक्सन को आपके लिए मैप किया जाना चाहिए था? – th3morg

+0

मैं स्ट्रिंग फॉर्म में संदेश का बॉडी प्राप्त करने और पीओजेओ ऑब्जेक्ट को क्रमबद्ध करने की कोशिश कर रहा था क्योंकि 1. मैं अनुरोध के एमडी 5 योग को सत्यापित करने के लिए शरीर का उपयोग करना चाहता था 2. मैं इनपुट को क्रमबद्ध करना चाहता था ऑब्जेक्ट क्योंकि ऑब्जेक्ट्स का उपयोग करना आसान है :) –

उत्तर

5

आप जो json स्ट्रिंग होना चाहिए String paymentMessage को PaymentMessage paymentMessage पैरामीटर बदल सकते हैं। तब कोई सत्यापन नहीं होगा हालांकि न ही आपके पास पीओजेओ होगा।

+0

हाँ, अंत में मैंने जो किया वह पीओजेओ को स्ट्रिंग को deserializing। –

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