Лениво загружать параметры запроса с помощью JAX-RS (Джерси)

#java #jersey #jax-rs

#java #джерси #jax-rs

Вопрос:

У меня есть метод HTTP GET в моей службе JAX-RS (Джерси), но я бы хотел, чтобы он принимал динамическое количество параметров запроса. Тем не менее, я хочу использовать Jenkins API для переноса этих параметров в @BeanParam объект, но лениво, вот так:

 @GET
public <T extends MyMessage> Response get(@PathParam("entity") String entity, @Context Request request) {
    /* Get the class that would normally be a parameter of this method, like this:
     *    [...] get(@PathParam("entity") String entity, @BeanParam MyMessage m)
     */
    Class<T> clazz = getMessageClass(entity);

    /* That's the magic part I would like to know how to do: */
    T message = createMessageFromRequest(request, clazz);

    /* ... then I would deal with my message however I wanted. */
}
 

Я знаю, что мог бы ввести UriInfo и прочитать карту параметров запроса «вручную», но я хочу использовать API Джерси, чтобы все было организовано, и не нужно вручную преобразовывать строки в правильные типы параметров.

Как пример, мой getMessageClass(entity) будет выглядеть примерно так:

 switch(entity) {
    case 'foo':
        return FooSpecificGet.class;
    default:
        return CommonGet.class;
}
 

и классы:

 class CommonGet {
    @QueryParam("page")
    private int pageNumber;

    @QueryParam("pageSize")
    private int pageSize;

    ...
}

class FooSpecificGet extends CommonGet {
    @QueryParam("fooFilter")
    private String fooFilter;

    ...
}
 

Комментарии:

1. Дженкинс ?! Вы имеете в виду Джерси, не так ли?

2. Да, извините, исправлено

3. Для меня это похоже на проблему XY . Я думаю @DefaultValue , что это может быть наилучшим вариантом.