如何在Java和Jersey中使用REST Web服务中的PUT或POST使用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",

您好,我正在开发一个iOS项目,在这个项目中,我将向我的RESTWeb服务发送一个json数组,该服务使用JAVA和Jersey以及Google Gson。我在SO上看到了几个问题,这些问题类似于,但我不知道如何找到解决方案。这里我向服务器发送JSON数组,它的结构如下

{
    "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;

     }


}
  • 我是否需要创建Friends类并将json对象映射到该类?请帮我写一些代码
  • 如果我必须使用GoogleGSON将json映射到我的friends类,那么GSON在这里可以扮演什么角色
  • 如何在mysql数据库中保存映射数据

  • 欢迎提供任何示例或解释。谢谢

    您的类
    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数组示例的任何链接吗