我试图在我的Jersey实现资源类中检索对象的集合,如下所示:
@POST @Path("/send") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String sendEmails(ArrayList<AnyEmail> email) { //emailManager.sendEmail(email); return "success"; }
我在@ AnyEmail上面有@XmlRootElement.
但是,当我使用REST客户端工具发布时:
emails : [ {"body": "Testing the web service","header": "Hi","footer": "<br/>test"},{"body": "Testing the web service","footer": "<br/>test"} ]
我明白了:
<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,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,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)
EDITED
现在我试过了:
"emails" : [ {"body": "Testing the web service","footer": "<br/>test"} ]
我得到:
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)
解决方法
这是应该工作的:
{ "anyEmail" : [ {"body": "Testing the web service","footer": "<br/>test"} ] }
此外,您可能希望使用POJO方法,这是JSON的首选方法 – 请参见此处:https://jersey.java.net/documentation/1.18/json.html
基于JAXB的JSON支持在一些边缘情况下存在各种问题,因为XML(JAXB设计用于)和JSON之间没有1:1映射.