java - 使用 JavaEE 7 中的 JSON 处理创建业务对象

标签 java json rest java-ee-7

我正在研究 JavaEE 7 的 JSON 处理,我有一个问题如下所述。

(在询问之前我已阅读以下信息但仍有疑问)

http://docs.oracle.com/javaee/7/tutorial/jsonp004.htm

How can I cast a JSONObject to a custom Java class?

How do I convert a JSONObject to class object?

1) 我有一个 REST 网络服务,它以 JSON 格式返回响应:

{"id":1141,"email":"user@organisation.com","enabled":"Y"}

2)有一个对应的JPA Entity叫做User

@Table(name = "USER")
@Entity
public class User {

@Id
@Column(name = "USER_ID")
private Long id;

@Column(name = "EMAIL")
private String email;

@Column(name = "ENABLED")
private String enabled;

3) 我有一个基于 Jersey Client API 和 Java EE JSON Processing 的客户端调用此 Web 服务。

Maven 依赖项:

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.22.1</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.0.4</version>
</dependency>

客户端代码:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:7001/projectname/rest");
WebTarget resourceWebTarget = target.path("users").queryParam("email", "user@organisation.com");
Invocation.Builder invocationBuilder = resourceWebTarget.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.get();

JsonReader reader = Json.createReader(response.readEntity(InputStream.class));           
JsonObject jObject = reader.readObject();

User user = new User();
user.setId(jObject.getJsonNumber("id").longValue());
user.setEmail(jObject.getString("email"));
user.setEnabled(jObject.getString("enabled"));

最后是问题:

我应该像 User = new User(); 这样创建用户并手动设置所有属性还是存在更方便的创建用户的方法?

最佳答案

目前无法使用简单的javax.json-api 进行直接映射 如果您使用 Jersey Client API,最好使用 Jackson 映射器。

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.23.2</version>
    <scope>provided</scope>
</dependency>

你可以使用这样简单的结构:

String jsonString = "{'id':1141,'email':'user@organisation.com','enabled':'Y'}";
User user = mapper.readValue(jsonString, User.class);

关于java - 使用 JavaEE 7 中的 JSON 处理创建业务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666370/

相关文章:

javascript - 从 Angular 传递时,Spring Boot 无法识别路径变量数据

json - 角度 6 指定的命令 ("deploy") 无效。有关可用选项的列表,请运行 "ng help"

javascript - 如何编写查找父子的递归方法

ios - 解析云推送通知正在推送给所有用户而不是目标用户

java - 如何在 Spring Boot 应用程序中实现长轮询 REST 端点?

rest - 异步任务的 HTTP 状态代码

angularjs - 在网页中提供 REST-API 数据而不暴露 API 端点

java - 如何在 Java 中覆盖 HTTP 连接中的 DNS

java - 启动后的 Android Studio 错误

java - 在这种情况下 Spark 内部是如何工作的?