如何在Java和Jersey中使用REST Web服务中的PUT或POST使用Json数组
您好,我正在开发一个iOS项目,在这个项目中,我将向我的RESTWeb服务发送一个json数组,该服务使用JAVA和Jersey以及Google Gson。我在SO上看到了几个问题,这些问题类似于,但我不知道如何找到解决方案。这里我向服务器发送JSON数组,它的结构如下如何在Java和Jersey中使用REST Web服务中的PUT或POST使用Json数组,java,json,web-services,jersey,gson,Java,Json,Web Services,Jersey,Gson,您好,我正在开发一个iOS项目,在这个项目中,我将向我的RESTWeb服务发送一个json数组,该服务使用JAVA和Jersey以及Google Gson。我在SO上看到了几个问题,这些问题类似于,但我不知道如何找到解决方案。这里我向服务器发送JSON数组,它的结构如下 { "friendList": [ {"id": 1, "username": "user1", "name":"person1"}, {"id": 2, "username": "user2",
{
"friendList": [
{"id": 1, "username": "user1", "name":"person1"},
{"id": 2, "username": "user2", "name":"person2"},
{"id": 3, "username": "user3", "name":"person3"},...
]
}
下面是我使用JSON数组的Java类
@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;
}
}
欢迎提供任何示例或解释。谢谢您的类
RestWebServicesAPI
必须实现接口MessageBodyReader
,使用其两种方法isreadable
和readFrom
,请阅读有关此接口的更多信息
别忘了用@Provider
注释为类添加注释关于您应该做什么的更详细解释,请参阅第43页的“Java API for JSON Processing”部分。JacksonJsonProvider.class用于将封送和解组JSON数组到您的自定义BO(朋友),这些BO(朋友)可以映射到mysql数据库中的数据 您确实需要使用GSON将您的BO(朋友)转换为JSON对象 JacksonJsonProvider会为您做这件事
可以使用jackson-all-1.9.11.jar获得该类。首先使用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;
}
}
@Provider
@使用(MediaType.APPLICATION_XML)
公共类JSONMessageBodyReader实现MessageBodyReader{
@凌驾
公共对象读取自(类classType、类型rawType、注释[]注释、MediaType MediaType、,
多值映射请求头映射,InputStream(InputStream)
抛出IOException、WebApplicationException{
System.out.println(“消息体读取器”);
JAXBContext上下文=null;
解组器解组器=null;
objectobj=null;
试一试{
context=JAXBContext.newInstance(类类型);
unmarshaller=context.createUnmarshaller();
obj=解组器。解组器(inputStream);
}捕获(JAXBEException e){
e、 printStackTrace();
}
返回obj;
}
@凌驾
`public boolean是可读的(Classthank you,您能提供使用JacksonJsonProvider.class解组JSON数组示例的任何链接吗