小编lsb*_*org的帖子

Jersey客户端:如何将列表添加为查询参数

我正在为具有List作为查询参数的GET服务创建Jersey客户端.根据文档,可以将List作为查询参数(此信息也在@QueryParam javadoc中),检查出来:

通常,方法参数的Java类型可以:

  1. 是一种原始的类型;
  2. 有一个接受单个String参数的构造函数;
  3. 有一个名为valueOf或fromString的静态方法接受单个String参数(例如,参见Integer.valueOf(String)和java.util.UUID.fromString(String)); 要么
  4. Be List,Set或SortedSet,其中T满足上面的2或3.生成的集合是只读的.

有时参数可能包含同一名称的多个值.如果是这种情况,则可以使用4)中的类型来获得所有值.

但是,我无法弄清楚如何使用Jersey客户端添加List查询参数.

我理解替代解决方案是:

  1. 使用POST而不是GET;
  2. 将List转换为JSON字符串并将其传递给服务.

第一个不好,因为服务的正确HTTP动词是GET.这是一种数据检索操作.

如果你不能帮助我,第二个将是我的选择.:)

我也正在开发这项服务,所以我可以根据需要进行更改.

谢谢!

更新

客户端代码(使用json)

Client client = Client.create();

WebResource webResource = client.resource(uri.toString());

SearchWrapper sw = new SearchWrapper(termo, pagina, ordenacao, hits, SEARCH_VIEW, navegadores);

MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("user", user.toUpperCase()); 
params.add("searchWrapperAsJSON", (new Gson()).toJson(sw));

ClientResponse clientResponse = webResource .path("/listar")
                                            .queryParams(params)
                                            .header(HttpHeaders.AUTHORIZATION, AuthenticationHelper.getBasicAuthHeader())
                                            .get(ClientResponse.class);

SearchResultWrapper busca = clientResponse.getEntity(new GenericType<SearchResultWrapper>() {});
Run Code Online (Sandbox Code Playgroud)

java rest jersey

75
推荐指数
4
解决办法
21万
查看次数

创建自定义验证器

我应该如何创建和配置验证器类以将其用作域类约束?例如:

class Link {
    String url
    static constraints = { url url:true }
}
Run Code Online (Sandbox Code Playgroud)

动机:Grails UrlValidator尽管有效,但不允许使用下划线字符,请参阅rfc2396,第2.3节.未保留的角色.

validation grails

0
推荐指数
1
解决办法
153
查看次数

标签 统计

grails ×1

java ×1

jersey ×1

rest ×1

validation ×1