如何在Java和Jersey中的REST WebServices中使用PUT或POST来使用Json数组

时间:2014-01-06 07:43:57

标签: java json web-services jersey gson

您好我正在开发一个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;

     }


}
  1. 我是否需要创建Friends Class并使用类映射json对象?请帮我一些代码。
  2. 如果我必须使用谷歌gson将json映射到我的朋友班,GSON可以在这里扮演什么角色。
  3. 如何将映射数据保存在mysql数据库中。
  4. 欢迎任何示例或任何解释。谢谢

3 个答案:

答案 0 :(得分:0)

您的班级RestWebServicesAPI必须使用MessageBodyReaderisReadeable两种方法实现界面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;
        }
    }