2012-04-04 11 views
6

मैं एक जर्सी सेवाओं और इकाई परीक्षण (जर्सी क्लाइंट का उपयोग) है कि 3 FormDataParams साथ ठीक काम किया है:जावा जर्सी बाकी सेवा करने के लिए एक ही नाम के साथ कई FormDataParams पोस्ट करना

@Path("myService") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@POST 
@Produces(MediaType.TEXT_PLAIN) 
public Response doService(@FormDataParam("p1") String v1, 
         @FormDataParam("p2") InputStream v2, 
         @FormDataParam("p3") InputStream v3) throws IOException { 

परीक्षण कोड इस तरह है:

FormDataMultiPart fdmp = new FormDataMultiPart();  
fdmp.field("p1", v1); 
fdmp.field("p2", v2); 
fdmp.field("p3", v3); 
ClientResponse response = service.path("myService").type(MediaType.MULTIPART_FORM_DATA).accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, fdmp); 

समस्या तब होती है जब मैं इसे पी 1 फ़ील्ड के लिए एकाधिक मानों का समर्थन करने के लिए बदलता हूं। मैं

@FormDataParam("p1") String v1, 

से

@FormDataParam("p1") List<String> v1, 

को सेवा हस्ताक्षर हिस्सा बदल लेकिन फिर मैं

04-Apr-2012 18:56:59 com.sun.grizzly.http.servlet.ServletAdapter doService 
SEVERE: service exception: 
java.lang.IllegalArgumentException: wrong number of arguments 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:172) 
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67) 
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:265) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133) 
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133) 
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:996) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:947) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:938) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:399) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:478) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:663) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 

मिल सवाल यह है कि मैं काम कर कोड मैं ऊपर तैनात एक से अधिक मान अनुमति देने के लिए बदल सकता है "पी 1" पैरामीटर के लिए।

+0

प्रश्न क्या है? –

+0

@Alex मैंने स्पष्ट रूप से अंत में यह कहा है। – Alb

+0

क्या आपने 'जेनेरिक एंटीटी' में अपनी 'सूची ' लपेटने का प्रयास किया था? –

उत्तर

7

आप के रूप में आप कोड

for (FormDataBodyPart vPart : v1) { 
    String v = vPart.getValueAs(String.class); 
    ... 

तुम बस के रूप में अच्छी तरह से vPart.toString() कॉल करने के लिए सक्षम हो सकता है की प्रक्रिया बंद

@FormDataParam("p1") List<FormDataBodyPart> v1 

पैरामीटर को बदलने के लिए और फिर खींच स्ट्रिंग्स चाहता हूँ; यह सामान्य विधि है।

+0

.toString() काम नहीं करता है, .getValueAs (String.class) ठीक काम करता है –

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