当前位置: 首页 > 知识库问答 >
问题:

如何在Java和Jersey中使用REST Web服务中的PUT或POST使用Json数组

阴飞星
2023-03-14

您好,我正在开发一个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对象映射到该类吗?请帮我写一些代码

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

共有3个答案

唐默
2023-03-14

首先编写带有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;
        }
    }
杨凯旋
2023-03-14

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

您确实需要使用GSON将您的BO(朋友)转换为JSON对象。JacksonJsonProvider会为您做这件事。

可以使用jackson-all-1.9.11获得该类。罐子

窦涵忍
2023-03-14

你的类RestWebServicesAPI必须实现接口MessageBodyReader,使用它的两种方法isreadablereadFrom,在这里阅读关于这个接口的更多信息不要忘记用@Provider注释
对你应该做的事情进行更详细的解释,请参阅“Java API for JSON Processing”一节,第43页。

 类似资料:
  • 问题内容: 我一直在搜寻我的屁股,试图找出如何做到这一点:我有一个Jersey REST服务。调用REST服务的请求包含一个JSON对象。我的问题是,从Jersey POST方法实现中,如何获得对HTTP请求正文中的JSON的访问? 任何提示,技巧,示例代码的指针,将不胜感激。 谢谢… -史蒂夫 问题答案: 我不确定如何获取JSON字符串本身,但是您当然可以获取其中包含的数据,如下所示: 定义一个

  • 资源 ComplexObject类只是一个带有字符串的类。当我点击URL:http://localhost:8080/simple-service-webapp/webapi/myresource/This work时,我得到的是“get it!” 但是当我点击:http://localhost:8080/simple-service-webapp/webapi/myresource/comple

  • 我有一个现有的Spring应用程序,它有自己的上下文,从Spring xml文件的douzens中引导。Grizzly web服务器开始发布Soap服务。 现在我也想满足同一只灰熊的Rest请求。我使用的是jersey-spring3,但它从所需的applicationContext.xml中启动自己的、独立的应用程序上下文。 这是创建注册Rest和Soap Web服务的Grizzly HttpS

  • 如果有人能给我提供一个简单的POST/GET示例,使用一个合适的POJO对象模型,那就太好了。 我有限的理解是,OData将关于实际对象模型的任何信息从编译时移动到客户端的运行时。我很乐意忽略这一点,并针对固定对象模型编写代码,因为我们使用的服务不会改变。

  • 我使用泽西和杰克逊访问一个REST Web服务,它正确地返回格式良好的JSON数据,但具有响应头: 内容类型:文本/html;字符集=UTF-8 即使我在请求头中指定了接受:应用程序/json,结果导致泽西抛出: org.glassfish.jersey.message.internal.MessageBodyProviderNotFound异常:找不到用于媒体类型=text/html; char

  • 问题内容: 我正在将以下JSON字符串发送到我的服务器。 在服务器上,我有这个。 当我发送字符串时,它表明我得到了200的响应,但是其他两种方法从未运行。这是为什么? 问题答案: 我认为您正在将对象的使用与的使用混为一谈。 该对象用于将HTTP响应发送回调用方客户端,而您想访问的正文。请参阅此答案,它提供了一些指导。 如果您使用的是有效的JSON并通过进行发布,则可以使用中间件解析请求正文并将结果