我正在使用Jersey框架来创建一个Rest API。该API为骑手和司机创建一个账户,用于共享骑行应用。这里是我项目的依赖关系。
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<!-- use the following artifactId if you don't need servlet 2.x compatibility -->
<!-- artifactId>jersey-container-servlet</artifactId -->
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20190722</version>
</dependency>
</dependencies>
我在将Java对象 "User"(包含司机发布的所有骑行信息)序列化为JSON对象时遇到了问题,因为我只想将特定属性转换为JSON。下面是我的 "User "类属性。
private String first_name;
private String last_name;
private String phone;
private String picture;
private boolean is_active;
private int aid;
private List<Rating> drivers_rating;
private List<Rating> riders_rating;
但是,当我做一个GET请求来获取司机的评价时,我只想让JSON响应包含 "first_name, phone, and drivers_rating". 下面是我尝试过的方法。
@Path("{aid}/driver")
@GET
@Produces(MediaType.APPLICATION_JSON)
public User viewDriverRatings(@PathParam("aid") int aid) {
return repo.viewDriverRatings(aid);
}
但是,返回的JSON响应包含了所有的属性。我应该怎么做才能只返回特定的属性到JSON中?
如果你确实需要限制列。为你提供的各种选择.1.为这个受限的可见性创建另一个类,包含 "first_name,电话,和drivers_rating"。这在设计上会更好.2.可以使用transient。这将不是一个好的设计,因为这将禁止整个类对象与这些属性序列化为任何其他功能。
我不建议在JSON级别进行限制。这将是一个糟糕的设计。
我同意Nilotpal的回答。我见过这样的情况,即响应可以包含更多的信息,而不是一个特定资源的请求。我见过有单独的Request和Response类的代码。在你的情况下,你可以创建一个UserReponse类,该类将拥有所有你想要返回的GET事务的字段。同样,对于POST工作流,你可以有一个UserRequest类,它将有消费者可以在请求体中发送的字段。