Можно ли в Джерси объединить QueryParams и FormParams в одно значение для метода?

У меня есть такая функция:

@POST
@Path("/create")
@Produces({MediaType.APPLICATION_JSON})
public Playlist createPlaylist(@FormParam("name") String name)
{
    Playlist p = playlistDao.create();
    p.setName(name);
    playlistDao.insert(p);
    return p;
}

Я хочу, чтобы параметр "имя" происходил из формы ИЛИ из параметра запроса. Если пользователь отправляет сообщение в / playlist / create /? Name = bob, я хочу, чтобы он работал. (Это в основном помогает при тестировании API, но также и для использования его на разных платформах, не связанных с браузером.)

Я бы хотел создать подкласс всего, что заставляет работать магическое связывание ... (@BothParam ("name" ) String name), но для этого мне понадобится помощь, так как я новичок в сервлетах Jersey / Java.


Обновление: на следующий день ...

Я решил эту проблему, реализовав ContainerRequestFilter, который объединяет параметры формы с параметрами запроса. Это не лучшее решение, но похоже, что оно работает. Мне не удалось что-либо объединить в параметры формы.

Вот код на случай, если кто-то придет его искать:

@Override
public ContainerRequest filter(ContainerRequest request) 
{
    MultivaluedMap<String, String> qParams = request.getQueryParameters();
    Form fParams = request.getFormParameters();
    for(String key : fParams.keySet())
    {
        String value = fParams.get(key).get(0);
        qParams.add(key, value);
    }
}

Я все еще был бы признателен, если бы знал, есть ли лучший способ сделать это, поэтому пока оставлю этот вопрос открытым.

6
задан Lee Taylor 12 March 2013 в 00:31
поделиться