我正在使用 Jersey 创建一个采用稍微复杂的 JSON 结构的 servlet:
[
{
"name": "bob",
"events": [
{
"type": "a",
"value": "b"
},
{
"type": "x",
"value": "y"
}
]
},
{
"name": "alice",
"events": [
{
"type": "one",
"value": "two"
},
{
"type": "three",
"value": "four"
}
]
}
]
我有以下数据类:
public class Read
{
private String name;
private ArrayList<Event> events;
// Getters & Setters
}
public class Event
{
private String type;
private String value;
// Getters & Setters
}
我希望能够接受 JSON 并将其放入 ArrayList<Read>
中目的。我有以下代码:
@Path("/postreads")
@Consumes(MediaType.APPLICATION_JSON)
public class PostReads
{
@POST
@Path("/batch")
public Response postReads(ArrayList<Read> reads)
{
for (Read read : reads)
{
System.out.println(read.toString());
}
return Response.status(200).entity("Success.").build();
}
}
当我让它做一个简单的对象( Event
,只有两个 String
属性)时,它工作得很好。但增加了 ArrayList
的复杂性杀了它。有没有办法自动解析该 JSON,还是需要手动解析?目前这是一个非常开放的项目,因此如果我需要添加额外的库,我可以。
我在 Eclipse 控制台上遇到的错误:
Jun 03, 2014 2:44:01 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class java.util.ArrayList, and Java type java.util.ArrayList<com.project.postevents.Event>, and MIME media type application/json was not found.
The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
编辑:方括号后面的逗号是一个拼写错误。传入的 JSON 进行验证。
最佳答案
您遇到的错误是因为您的 JSON 文件无效。方括号后面的逗号不应该出现在此处。
Error: Parse error on line 13:
... }
],
},
{
"name":
--------------------^
Expecting 'STRING', got '}'
关于java - 在 Jersey 中解析复杂的 JSON 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025793/