У меня есть такая функция:
@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);
}
}
Я все еще был бы признателен, если бы знал, есть ли лучший способ сделать это, поэтому пока оставлю этот вопрос открытым.