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

问题描述 投票:0回答:1

我正在使用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中?

java rest jersey jax-rs moxy
1个回答
2
投票

如果你确实需要限制列。为你提供的各种选择.1.为这个受限的可见性创建另一个类,包含 "first_name,电话,和drivers_rating"。这在设计上会更好.2.可以使用transient。这将不是一个好的设计,因为这将禁止整个类对象与这些属性序列化为任何其他功能。

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


1
投票

我同意Nilotpal的回答。我见过这样的情况,即响应可以包含更多的信息,而不是一个特定资源的请求。我见过有单独的Request和Response类的代码。在你的情况下,你可以创建一个UserReponse类,该类将拥有所有你想要返回的GET事务的字段。同样,对于POST工作流,你可以有一个UserRequest类,它将有消费者可以在请求体中发送的字段。

© www.soinside.com 2019 - 2024. All rights reserved.