2013-06-24 41 views
1

我正在使用Apache CXF編寫基於代理的Rest客戶端,我想傳遞一些查詢參數,而不必在代理接口中的「搜索」方法中傳遞它們。我嘗試使用@DefaultValue,但由於你仍然必須定義一個方法參數,我必須在任何地方傳遞相同的確切值。有沒有辦法告訴CXF始終傳遞一個具有相同值的查詢參數?這樣我可以從代理方法中刪除一些不必要的參數。CXF Rest客戶端 - 默認傳遞HTTP查詢參數

@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); 

回答

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); 

search實現只是調用從SearchParameters靜態建設者request和你有它。

+0

聽起來不錯。讓我試試這個,回到你身邊。 –

+0

你試過了嗎?它有用嗎? – Avi

+0

對不起,我還沒有機會嘗試它。重點改變:)我會讓你知道,當我回到這個。謝謝.. –