1

我正在使用 Apache CXF 编写一个基于代理的 Rest 客户端,我想传递一些查询参数,而不必在代理接口的“搜索”方法中传递它们。我尝试使用@DefaultValue,但你仍然必须定义一个方法参数,我必须在任何地方传递相同的确切值。有没有办法告诉 CXF 始终传递具有相同值的查询参数?这样我就可以从代理方法中删除一些不必要的参数。

    @GET
    @Path("/{version}/{accountId}/search")
    @Produces(MediaType.APPLICATION_JSON)
    public String search(@PathParam("version") String version,
                         @PathParam("accountId") String accountId,
                         @DefaultValue("")@QueryParam("q") String queryString,
                         @DefaultValue("")@QueryParam("category") String category,
                         @DefaultValue("1")@QueryParam("page") int page,
                         @DefaultValue("50")@QueryParam("limit") int limit,
                         @DefaultValue("all")@QueryParam("response_detail") String responseDetail);
4

1 回答 1

1

你为什么不尝试不同的方法。创建一个SearchParameters只是普通 pojo 的对象:

public class SearchParameters {
     private String version;
     private String accountId;
     // Other fields

     public static SearchParameters(HttpServletRequest request) {
        // Here you use the getParameterMap of the `request` object to get
        // the query parameters. Look here: http://stackoverflow.com/questions/6847192/httpservletrequest-get-query-string-parameters-no-form-data

        // Everything that was not passed in the parameters
        // just init with default value as you wish.
     }

     // Getters and setters here
}

现在将search定义更改为如下所示:

@GET
@Path("/{version}/{accountId}/search")
@Produces(MediaType.APPLICATION_JSON)
public String search(@PathParam("version") String version,
                     @PathParam("accountId") String accountId,
                     @Context HttpServletRequest request);

在实现中,只需从withsearch调用静态构建器,就可以了。SearchParametersrequest

于 2013-06-24T20:27:32.630 回答