我正在使用Jersey进行REST WS,我的响应是JSON格式。
我想将这个响应转换为POJO。该怎么做?
要在Java和JSON之间进行转换,有许多可供选择的API。
您可以“手动”遍历JSON组件并提取值以填充Java对象,或者您可以使用JSON到Java绑定API来处理许多低级映射问题。
Jackson就是这样一种API。它易于使用,并且提供了可能最完整的API功能,以解决常见问题和自定义。StackOverflow.com有很多关于如何使用它的例子。
@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对象。[注意]此方式被推荐,因为它能够向调用您的网络服务的用户提供有关交易或服务状态的信息。
<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());
我也在寻找同样的东西,但是因为其他人要求你添加注释或编写/生成获取器和设置器方法来处理变量,所以我编写了自己的编解码器来处理使用反射进行 JSON<->POJO 转换。