2013-06-24 2 views
1

Я пишу клиент на основе прокси-сервера с использованием Apache CXF, и я хотел бы передать некоторые параметры запроса, не передавая их в моем методе поиска в прокси-интерфейсе , Я попытался использовать @DefaultValue, но с этим вам все еще нужно определить параметр метода, который я должен передавать везде, где бы то ни было. Есть ли способ сказать CXF передавать параметр запроса с одинаковым значением все время? Таким образом, я могу удалить некоторые ненужные параметры из прокси-методов.Клиент CXF Rest Client - передайте 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

Извините, у меня еще не было возможности попробовать. Приоритеты изменились :) Я сообщу вам, когда вернусь к этому. Спасибо.. –

Смежные вопросы