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

如何使用Jersey将Java对象的特定属性序列化为JSON?,java,rest,jersey,jax-rs,moxy,Java,Rest,Jersey,Jax Rs,Moxy,我正在使用Jersey框架创建RESTAPI。API为骑手和驾驶员创建一个帐户,用于共享骑乘应用程序。这里是我的项目的依赖项 <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core&

我正在使用Jersey框架创建RESTAPI。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>

但是,它返回包含所有属性的JSON响应。如果您确实需要限制列,我应该怎么做才能将特定属性返回到JSON中?

。为您提供各种选项。 1.为该受限可见性创建另一个类,包含名字、电话和驾驶员等级。这在设计上会更好。 2.可以使用瞬态。这将不是一个好的设计,因为这将禁止使用这些属性对任何其他功能的整个类对象进行序列化


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

如果您确实需要限制列。为您提供各种选项。 1.为该受限可见性创建另一个类,包含名字、电话和驾驶员等级。这在设计上会更好。 2.可以使用瞬态。这将不是一个好的设计,因为这将禁止使用这些属性对任何其他功能的整个类对象进行序列化


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

我同意尼洛帕尔的回答。我见过这样的情况:响应可以包含比特定资源请求更多的信息。我见过一些代码,其中请求和响应有单独的类。在本例中,您可以创建一个UserResponse类,该类将包含要为GET事务返回的所有字段。与POST工作流类似,您可以拥有一个UserRequest类,该类将包含消费者可以在请求正文中发送的字段,

我同意Nilotpal的响应。我见过这样的情况:响应可以包含比特定资源请求更多的信息。我见过一些代码,其中请求和响应有单独的类。在本例中,您可以创建一个UserResponse类,该类将包含要为GET事务返回的所有字段。类似地,对于POST工作流,您可以有一个UserRequest类,该类将包含消费者可以在请求正文中发送的字段。

您认为使用JSONObject也是一个选项,因为它允许您获取特定属性吗?否则,我将使用您的解决方案。您能解释一下使用JSONObject是什么意思吗?我不建议添加逻辑来获得特定属性。如果您必须在响应/请求中添加额外的字段,那么更新相应的对象会很简单。您认为使用JSONObject也是一个选项,因为它允许您获取特定的属性吗?否则,我将使用您的解决方案。您能解释一下使用JSONObject是什么意思吗?我不建议添加逻辑来获得特定属性。如果您必须向响应/请求添加额外字段,那么更新相应的对象将非常简单。
    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;
    @Path("{aid}/driver")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public User viewDriverRatings(@PathParam("aid") int aid) {
        return repo.viewDriverRatings(aid);
    }