将JSON转换为POJO

9

我正在使用Jersey进行REST WS,我的响应是JSON格式。

我想将这个响应转换为POJO。该怎么做?

5个回答

10

要在Java和JSON之间进行转换,有许多可供选择的API。

您可以“手动”遍历JSON组件并提取值以填充Java对象,或者您可以使用JSON到Java绑定API来处理许多低级映射问题。

Jackson就是这样一种API。它易于使用,并且提供了可能最完整的API功能,以解决常见问题和自定义。StackOverflow.com有很多关于如何使用它的例子。


我正在进行以下操作: WebResource resource = client.resource(urlStr); resource.accept(MediaType.APPLICATION_JSON); GenericType<List<EMailInformations>> genericType = new GenericType<List<EMailInformations>>() {}; List<EMailInformations> response = null; try{ response = resource.get(genericType); } catch (UniformInterfaceException ue) { ClientResponse clientResponse = ue.getResponse(); }但是我得到了这个错误: GRAVE: 找不到 Java 类 java.util.List 的消息体读取器,以及 Java 类型... - Marouane Gazanayi
2
我建议您在一个新的问题中发布此内容。关于错误信息的更多信息,导致错误的特定代码行以及错误发生时相关组件的值越详细,越好。 - Programmer Bruce
尝试使用Jersey将JSON转换为POJO时出错。 - Marouane Gazanayi

1

0
你也可以使用JaxB绑定来处理转换。它是Java SE的一部分,因此不需要下载jar文件。但是,您需要编写一个包含所有属性的pojo类,该json对象将返回和访问器方法以评估它们。然后,您将在该类上添加XmlRootElement注释,这将使jaxb能够在必要时转换为和从json。例如:
POJO
 @XmlRootElement
public class User
{
    private String name;

   public void setName (String name)
   {
      this.name = name;
   }

   public String getName ()
   {
       return name;
   }

}

Jersey服务

 @GET
 @Produces (MediaType.APPLICATION_JSON)
 public User getUser ()
 {
     User user = new User ();
     user.setName ("John Doe");
     return user;
 }

这将转换User POJO对象并以此示例JSON中指定的媒体类型返回它。您甚至可以使用Response对象返回它。例如:

  @GET
 @Produces (MediaType.APPLICATION_JSON)
 public Response getUser ()
 {
     User user = new User ();
     user.setName ("John Doe");
     return Response.status (Status.OK).entity (user).build ();
 } 

此方法返回状态码为200(成功)的响应对象以及用户JSON对象。[注意]此方式被推荐,因为它能够向调用您的网络服务的用户提供有关交易或服务状态的信息。


0
我们还可以在您的pom文件中使用以下给定的依赖项和插件。
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>1.7.1</version>
</dependency>

<plugin>
    <groupId>com.googlecode.jsonschema2pojo</groupId>
    <artifactId>jsonschema2pojo-maven-plugin</artifactId>
    <version>0.3.7</version>
    <configuration>
        <sourceDirectory>${basedir}/src/main/resources/schema</sourceDirectory>
        <targetPackage>com.example.types</targetPackage>
    </configuration>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

通过使用这些工具,您可以根据JSON模式生成POJO,然后利用下面的代码来通过指定为参数的src对象填充请求JSON对象:gson.toJson(Object src)

Gson gson = new GsonBuilder().create();
String payloadStr = gson.toJson(data.getMerchant().getStakeholder_list());

0

我也在寻找同样的东西,但是因为其他人要求你添加注释或编写/生成获取器和设置器方法来处理变量,所以我编写了自己的编解码器来处理使用反射进行 JSON<->POJO 转换。

请参见这里:http://homac.cakelab.org/projects/org.cakelab.json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接