首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jersey 1.17.1 POJO映射功能服务器和如何从客户端获取?

Jersey 1.17.1 POJO映射功能服务器和如何从客户端获取?
EN

Stack Overflow用户
提问于 2013-09-06 14:44:31
回答 2查看 11.4K关注 0票数 1

我在服务器上运行REST服务,我想将我的POJO列表转换为Json。我不想使用@XMLRootElement JA-RX,因为它只适用于XML。如果你在谷歌上搜索,你会发现Jackson是Json非常好的选择。

有没有人已经解决了这个问题,请粘贴完整的服务器和客户端代码?

注意:我花了16个小时来了解如何做到这一点,当我回答问题时,他们删除了我的答案,所以我决定把这篇文章放在这里,以节省其他人宝贵的时间,我相信知识共享。如果你能改进我的代码,请。我总是乐于接受建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-06 14:44:57

详细回复包括服务器客户端使用JSON编组和解组的示例实现

注意: Json POJO映射功能是使用Jackson完成的

我花了一整天的时间来找出为什么找不到消息体写入。我所做的错误是我在我的Jersey 1.17.1Web Service中使用了JAXB javax.xml.bind.annotation @XMLRootElement,并且我试图用Jackson来解开它。

实际上,如果你用谷歌搜索一下,你会发现JAXB只适用于XML,但对于JSON,Jackson是非常好的。我还忘了在我的web.xml中设置一些配置参数来启用POJO映射功能。

下面是您的servlet映射如何启用Jackson的POJO映射特性的快照。

代码语言:javascript
运行
复制
<!-- WebService -->
  <servlet>
        <servlet-name>REST Service</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
            <param-value>com.sun.jersey.api.container.filter.LoggingFilter;com.algo.server.webservice.WebServiceRequestFilter</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.algo.server.webservice;org.codehaus.jackson.jaxrs</param-value>
        </init-param>
         <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

您还需要将这些jar文件添加到WEB-INF/libs文件夹中

  • jackson-core-asl-1.9.2.jar
  • jackson-mapper-asl-1.9.2.jar
  • jackson-xc-1.9.2.jar
  • jackson-jaxrs-1.9.2.jar

这是一个返回某些对象列表的示例web服务方法

代码语言:javascript
运行
复制
    @GET
@Produces({ MediaType.APPLICATION_JSON })
@Path("/clientId/{client_id}/clientDept/{client_department}/clientLoc/{client_location}")
public Response getTasksForClientId(@PathParam("client_id") String pClientId,
        @PathParam("client_department") String pClientDepartment,
        @PathParam("client_location") String pClientLocation) {
    List<Task> list = new ArrayList<Task>(10);
    Task task = null;
    for (int i = 0; i < 10; i++) {
        task = new Task();
        task.setComments("These are test comments");
        task.setCreatedBy(11L);
        task.setCreatedOn(new Date());
        task.setFromDay(new Date());
        task.setFromTime(new Date());
        task.setToTime(new Date());
        task.setToDay(new Date());
        task.setUpdatedOn(new Date());
        task.setLocation("Pakistan Punajb");
        task.setSpecialCoverImage("webserver\\cover\\cover001.png");
        task.setTargetId(1L);
        task.setTargetPlaceHolder(2);
        task.setUpdatedBy(23234L);
        list.add(task);
    }
    GenericEntity<List<Task>> entity = new GenericEntity<List<Task>>(list) {
    };
    return Response.ok(entity).build();
}

客户端

现在如何在客户端将这个JSON对象转换为相同的List<T>对象。这是一种小人:-)

您需要将您转换为POJO的相同类从服务器放入。它应该是相同

代码语言:javascript
运行
复制
private void checkForUpdate() {
        ClientConfig clientConfig = new DefaultClientConfig();
        clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
        clientConfig.getClasses().add(JacksonJsonProvider.class);
        Client client = Client.create(clientConfig);                

        WebResource webResource = client.resource("http://localhost:8080/some-server");

        WebResource wr = webResource.path("rest").path("taskPublisherService").path("clientId/12").path("clientDept/2").path("clientLoc/USA");

        ClientResponse clientResponse = wr.type(MediaType.APPLICATION_JSON).get(ClientResponse.class);

        List<Task> lists = clientResponse.getEntity(new GenericType<List<Task>>() {});

        System.out.println(lists);   

    }
票数 12
EN

Stack Overflow用户

发布于 2013-10-31 03:06:18

这个来自Jersey的包包含了上面提到的所有罐子:

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>${version.jersey}</version>
    <scope>runtime</scope>
</dependency>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18651544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档