您好我正在开发一个iOS项目,我将一个json数组发送到我的REST Web服务,该服务使用JAVA和Jersey以及Google Gson。我已经看到了几个关于SO的问题,它们有类似的问题,如link,但我无法得到如何处理解决方案。这里我将JSON数组发送到具有类似
结构的服务器{
"friendList": [
{"id": 1, "username": "user1", "name":"person1"},
{"id": 2, "username": "user2", "name":"person2"},
{"id": 3, "username": "user3", "name":"person3"},...
]
}
这是我的Java类使用JSON数组
@Path("/FriendsList")
public class RestWebServicesAPI {
@POST
@Path("/friends")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Friends saveFriedList(Friends friend, @Context HttpServletRequest request) {
//What to write here?
return friend;
}
}
欢迎任何示例或任何解释。谢谢
答案 0 :(得分:0)
您的班级RestWebServicesAPI
必须使用MessageBodyReader
和isReadeable
两种方法实现界面readFrom
,详细了解此界面here
不要忘记使用@Provider
注释来注释您的课程
有关应该执行的操作的更详细说明here,请参阅“用于JSON处理的Java API”部分,第43页。
答案 1 :(得分:0)
JacksonJsonProvider.class用于编组和解组 JSON数组到您可以在mysql数据库中映射数据的自定义BO(好友)。
您需要使用GSON将BO(朋友)转换为JSON对象 JacksonJsonProvider为你做到了。
可以使用jackson-all-1.9.11.jar获得课程。
答案 2 :(得分:0)
首先使用JAXB注释在POJO类上编写,然后编写一个从MessageBodyReader接口实现的类JSONMessageBodyReader。您必须并且应该使用@Provider注释该类
@Provider
@Consumes(MediaType.APPLICATION_XML)
public class JSONMessageBodyReader implements MessageBodyReader<Object> {
@Override
public Object readFrom(Class<Object> classType, Type rawType, Annotation[] annotation, MediaType mediaType,
MultivaluedMap<String, String> requestHeaderMap, InputStream inputStream)
throws IOException, WebApplicationException {
System.out.println("Message Body Reader");
JAXBContext context = null;
Unmarshaller unmarshaller = null;
Object obj = null;
try {
context = JAXBContext.newInstance(classType);
unmarshaller = context.createUnmarshaller();
obj = unmarshaller.unmarshal(inputStream);
} catch (JAXBException e) {
e.printStackTrace();
}
return obj;
}
@Override
`public boolean isReadable(Class<?`> classType, Type rawType, Annotation[] annotation, MediaType mediaType) {
if (classType.isAnnotationPresent(XmlRootElement.class)) {
return true;
}
return false;
}
}