有没有办法使用泽西过滤器更改现有查询参数。我有客户传递像这样的id
/ V1 /路径?ID = 1,2,3
我希望他们在我的资源类中显示为列表 //资源类
public List<Something> getFilteredList(@QueryParam("id") List<String> ids) {//
现在,ids列表包含1个字符串,即1,2,3。我想应用一个过滤器并将任何逗号分隔的查询参数更改为多值参数,以便资源方法获取列表。
这一切都可能吗?我尝试了一个过滤器,但泽西的
给出了查询参数ContainerRequestContext.getUriInfo().getQueryParameters()
是不可改变的。
解决这个问题的好方法是什么?
答案 0 :(得分:1)
我能想到的最好方法是为列表创建一个包装类。这样可以更轻松地利用Jersey的指定功能。你可以在Passing custom type query parameter看到我的意思。
例如
public class IdFilter {
private List<String> ids = new ArrayList<>();
public List<String> getIds() { return ids; }
public static IdFilter valueOf(String param) {
IdFilter filter = new IdFilter();
for (String id: param.split(",") {
filter.getIds().add(id);
}
}
}
getFilteredList(@QueryParam("id") IdFilter ids) {
我们不需要做任何其他事情。只需拥有static valueOf
就足以让Jersey了解如何解析查询字符串。