CXF JAXRS - Comment POSTER plus d'un paramètre
Comment puis-je envoyer plus d'un paramètre dans le corps de la requête dans une requête POST?
@POST
@Consumes("multipart/form-data")
@Produces("application/json")
public String addForm1(@FormParam("i1") Integer i1, @FormParam("i2") Integer i2);
Code ci-dessus renvoie HTTP 415.
Remplacement @FormParam
avec @Multipart
résultats dans Resource method has more than one parameter representing a request body
erreur, comme indiqué ci-dessous.
SEVERE: Resource method service.rs.TestService.postData2 has more than one parameter representing a request body
Exception in thread "main" org.apache.cxf.jaxrs.client.ClientWebApplicationException: Resource method service.rs.TestService.postData2 has more than one parameter representing a request body
at org.apache.cxf.jaxrs.client.ClientProxyImpl.reportInvalidResourceMethod(ClientProxyImpl.java:546)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.getParametersInfo(ClientProxyImpl.java:214)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:138)
at $Proxy20.postData2(Unknown Source)
at service.TestServiceClient.main(TestServiceClient.java:82)
Aussi, que dois-je faire afin de transmettre plusieurs types complexes tels que List<Map<String, String>>' or 'List<MyNestedCustomObject>
dans la méthode POST? Je suis en mesure de passer à un tel paramètre à l'aide de JAXB
et en annotant avec @XmlJavaTypeAdapter
, mais je suppose que ça ne fonctionne pas dans le cas du passage de plusieurs paramètres? Serais-je obligé de définir mon propre corps du message lecteurs & des écrivains? Tout exemple de code serait utile.
Grâce
OriginalL'auteur domino | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
J'ai pensé à une façon de le faire (voir le code ci-dessous). Mais si vous connaissez un meilleur moyen, qui, de préférence, ne pas utiliser le concept de "pièces jointes" et utilise jaxrs:le client directement au lieu de
WebClient
, s'il vous plaît laissez-moi savoir.Service:
Client:
OriginalL'auteur domino
Vous n'utilisez pas
@FormParam
avec@Consumes
; utiliser seulement@FormParam
sur les paramètres et CXF se chargeront du reste.Quand je passe en retrait résultats, j'ai renvoyer un seul JAXB-annoté de l'objet qui contient la liste des choses. CXF utilise en interne Larguer, qui utilise ces annotations JAXB pour guider la conversion en JSON. Cela fonctionne assez bien pour moi.
@Consumes
aidé. Cependant, j'ai réalisé que j'ai besoin de passer@Multipart
params depuis mes paramètres ne sont pas simples. J'ai besoin de mettre 2 params de ces types: 1.List<Map<String, String>>
et 2.MyCustomObject
. Passant 1 ces param fonctionne très bien (j'ai définiXmlJavaTypeAdapter
pourMap<String, String>
et annotéMyCustomObject
avec@XmlRootElement
). Mais quand j'ai passer les deux paramètres, il jettehas more than one parameter representing a request body
erreur. J'ai essayémultipart/mixed
&multipart/related
pour@Consumes
et marqué params avec@Multipart
. Apprécier une aide rapide.Hmm, vous vous êtes à l'extérieur de la région que je connais assez bien pour directement vous conseiller. cxf.apache.org/docs/jax-rs-multiparts.html dit utiliser
@Multipart
ou une signature deList<Attachment>
. Quelle est la version de CXF utilisez-vous?Depuis que je ne suis pas traiter avec tous les fichiers/pièces jointes en tant que tel, j'ai essayé
@Multipart
. Va vérifier siList<Attachment>
peut être d'une aide quelconque. Je suis en utilisant 2.5.2. Il y a de exemples sur cette page qui semblent suggérer qu'il devrait être simple de publier plusieurs paramètres à l'aide de@Multipart
. Je suppose que je suis en manque de quelque chose.OriginalL'auteur Donal Fellows