【问题标题】:How to consume Json Array using PUT or POST in REST WebServices in Java and Jersey如何在 Java 和 Jersey 的 REST WebServices 中使用 PUT 或 POST 来使用 Json 数组
【发布时间】:2014-01-23 13:55:05
【问题描述】:

您好,我正在开发一个 iOS 项目,我正在向我的 REST Web 服务发送一个 json 数组,该服务使用 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"},...
    ]
}

这是我使用 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;

     }


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

欢迎任何示例或任何解释。谢谢

【问题讨论】:

    标签: java json web-services jersey gson


    【解决方案1】:

    你的类RestWebServicesAPI必须实现接口MessageBodyReader,它有两个方法isReadeablereadFrom,阅读更多关于这个接口here 不要忘记使用 @Provider 注释来注释您的课程
    有关您应该做什么here 的更详细说明,请参阅第 43 页的“用于 JSON 处理的 Java API”部分。

    【讨论】:

      【解决方案2】:

      JacksonJsonProvider.class 用于编组解组 JSON 数组到您的自定义 BO(朋友),可以映射到 mysql 数据库中的数据。

      您确实需要使用 GSON 将您的 BO(朋友)转换为 JSON 对象 JacksonJsonProvider 为您完成。

      类可以使用jackson-all-1.9.11.jar获取。

      【讨论】:

      • 谢谢,您能提供任何使用 JacksonJsonProvider.class 解组 JSON 数组的示例链接
      【解决方案3】:

      首先使用 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;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2014-01-26
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多