Jersey: liste des objets JSON
Je suis en train de récupérer dans mon Maillot de mise en œuvre de ressources de la classe post collection d'objets comme ceci:
@POST
@Path("/send")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String sendEmails(ArrayList<AnyEmail> email) {
//emailManager.sendEmail(email);
return "success";
}
J'ai le @XmlRootElement
ci-dessus `AnyEmail.
Mais quand je suis à ce poste avec le REPOS outil client:
emails : [
{"body": "Testing the web service", "header": "Hi", "footer": "<br/>test"},
{"body": "Testing the web service", "header": "Hi", "footer": "<br/>test"}
]
J'obtiens:
<html><head><title>Apache Tomcat/7.0.22 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: Servlet execution threw an exception
</pre></p><p><b>root cause</b> <pre>java.lang.Error: Error: could not match input
com.sun.jersey.json.impl.reader.JsonLexer.zzScanError(JsonLexer.java:491)
com.sun.jersey.json.impl.reader.JsonLexer.yylex(JsonLexer.java:736)
ÉDITÉ
Maintenant, j'ai essayé:
"emails" : [
{"body": "Testing the web service", "header": "Hi", "footer": "<br/>test"},
{"body": "Testing the web service", "header": "Hi", "footer": "<br/>test"}
]
et j'obtiens:
SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/API] threw exception
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(ArrayList.java:324)
at com.sun.jersey.json.impl.reader.JsonXmlStreamReader.valueRead(JsonXmlStreamReader.java:165)
at com.sun.jersey.json.impl.reader.JsonXmlStreamReader.readNext(JsonXmlStreamReader.java:330)
- Je crois que vous devriez envoyer tableau JSON au lieu de l'objet JSON. Essayez d'envoyer uniquement les
[{...},{...}]
segment de la demande de l'entité. - Quand je fais ce que je reçois: javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException - liés exception: [javax.xml.bind.UnmarshalException: inattendu élément (uri:"", locale:"le corps"). Éléments attendus sont <{}anyEmail>]
Vous devez vous connecter pour publier un commentaire.
C'est ce qui devrait fonctionner:
Aussi, vous souhaitez peut-être utiliser le POJO de l'approche qui est privilégiée pour le JSON - voir ici: https://jersey.java.net/documentation/1.18/json.html
La prise en charge de JSON basé sur JAXB a divers problèmes avec certains cas limites, puisqu'il n'y a pas un mappage 1:1 entre XML (JAXB conçue pour) et JSON.
Pourquoi vous n'utilisez pas de Java simple tableau???
Et puis la méthode suivante:
Cela devrait faire l'affaire...
Je ne suis ni Maillot, ni Json expert, mais avez-vous essayez d'utiliser un objet JSON, c'est à dire :
(ajouté des accolades, et des citations à des e-mails).
J'ai eu le même problème. Vous devez envelopper la AnyEmail classe.
Cela peut vous aider: https://blogs.oracle.com/japod/entry/missing_brackets_at_json_one
//Client
//ClientService
//JerseyClient
//POM.xml
Je suis à l'aide de Jersey 1.17 et peut recevoir la liste des objets JSON avec la signature suivante, et les jetèrent dans la liste de mes Objets POJO avec Google gson de la bibliothèque, sans aucun problème. À l'aide de wrapper pour envelopper liste des objets POJO, est certainement non naturels et non pas favorable.