У меня есть такая функция:
@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;
}
Я хочу, чтобы параметр "name" пришел из формы ИЛИ из параметра запроса. Если пользователь публикует в / playlist / create /? Name = bob, я хочу, чтобы он работал. (Это главным образом для помощи в тестировании API, но также и для использования его на разных платформах без браузера.)
Я бы хотел создать подкласс того, что делает магическое связывание работоспособным ... (@BothParam ("name") имя строки), но мне понадобится некоторая помощь, чтобы это произошло, поскольку я новичок в сервлетах Джерси / 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);
}
}
Я все равно буду признателен, если есть лучший способ сделать это, поэтому я пока оставлю этот вопрос открытым.