Dropwizard / Jersey使用过滤器更改查询参数

时间:2015-07-16 15:01:27

标签: jersey dropwizard

有没有办法使用泽西过滤器更改现有查询参数。我有客户传递像这样的id

/ V1 /路径?ID = 1,2,3

我希望他们在我的资源类中显示为列表 //资源类

public List<Something> getFilteredList(@QueryParam("id") List<String> ids) {//

现在,ids列表包含1个字符串,即1,2,3。我想应用一个过滤器并将任何逗号分隔的查询参数更改为多值参数,以便资源方法获取列表。

这一切都可能吗?我尝试了一个过滤器,但泽西的

给出了查询参数
ContainerRequestContext.getUriInfo().getQueryParameters() 

是不可改变的。

解决这个问题的好方法是什么?

1 个答案:

答案 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了解如何解析查询字符串。