gpt4 book ai didi

java - 集合和 jax-rs

转载 作者:行者123 更新时间:2023-11-30 04:28:42 25 4
gpt4 key购买 nike

假设我有一个集合/cars,它支持常规操作,并且我还支持/cars/{id}。

当我获得/cars 的 GET 时,仅返回集合元素的有限“ View ”的最佳实践是什么?也就是说,列出 id、名称就足够了,客户需要更多信息,他可以通过/cars/{id} 查询更多详细信息。

最佳答案

这可能是 Jackon 的 @JsonView 注释的良好候选者。我通常在公共(public)包中定义一些标记接口(interface)(可以在应用程序中重用):

public interface View {
public interface Partial { }
public interface Full extends Partial { }
}

然后你可以在汽车类中使用它们,如下所示:

public class Car {
private int id;
private String name;
//Supresses serialization of this property when another view is active
@JsonView(View.Full.class)
private String description;

......
}

最后激活资源中适当的 View :

@Path("/")
@JsonView(View.Partial.class)
public Collection<Car> getAll();

@Path("/{id}")
@JsonView(View.Full.class)
public Car getById(@PathParam("id") int id);

请注意,从 getAll() 方法中省略 @JsonView(View.Partial.class) 将导致所有属性被序列化(在本例中是一个可能期望 description 不会被序列化)。这是因为 Jackson 禁用 View 处理并忽略所有 View 注释,除非指定了显式 View 进行渲染。我为此编写了一个解决方法(以便在未指定 View 时,仅序列化属于默认 View 的属性)。我只能让它用于序列化,但不能用于反序列化,如果你有兴趣,我可以尝试挖掘它。

关于java - 集合和 jax-rs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15158981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com