如何使用 Jersey 将 Java object 的特定属性序列化为 JSON?

How to serialize specific attributes of the Java object to JSON with Jersey?

我正在使用 Jersey 框架创建 Rest API。 API 为骑手创建一个帐户,driver 为共享乘车应用程序创建一个帐户。这是我的项目的依赖项。

    <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 Object "User"(包含 driver 发布的游乐设施的所有信息)序列化为 [=33= 时遇到问题] object 因为我只想将特定属性转换回 JSON。这是我的 "User" class 属性:

    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);
    }

但是,return 是具有所有属性的 JSON 响应。我应该怎么做才能将 return 特定属性转换为 JSON?

如果确实需要限制列。多种选择供您选择。 1. 为此受限制的可见性创建另一个 class,包含 "first_name, phone, and drivers_rating"。这在设计方面会更好。 2.可以使用transient。这不是好的设计,因为这将禁止整个 class 对象也使用这些属性序列化以用于任何其他功能。

我不建议限制在 JSON 级别。那将是一个糟糕的设计。

我同意 Nilotpal 的回复。我见过这样的情况,其中响应可以包含比特定资源请求更多的信息。我看到代码中有单独的 classes 用于请求和响应。在您的情况下,您可以创建一个 UserReponse class,它将包含您想要 return 用于 GET 事务的所有字段。同样,对于 POST 工作流,您可以有一个 UserRequest class,其中包含消费者可以在请求正文中发送的字段,