2013-10-25 3 views
1

Я использую Джерси 2.3.1 на Glassfish 4.Джерси вопрос 2.x с MultivaluedMap

Мой метод ресурс похож на следующее:

 @POST 
     @Consumes("application/x-www-form-urlencoded") 
     @Path("/update") 
     public Response update(MultivaluedMap<String, String> formParams){ 
    //business logic 
    //return appropriate Response object 
    } 

Я всегда получаю formParams.size() как ноль. Почему представленные параметры формы недоступны в объекте MultivaluedMap?

следующее предупреждение в журнале сервера:

ВНИМАНИЕ: Запрос сервлета к URI http://localhost:8080/myApp/resource/update содержат параметры формы в теле запроса, но тело запроса было потреблено сервлет или сервлет фильтром, обращающийся к параметры запроса. Только методы ресурсов, использующие @FormParam, будут работать как ожидалось. Методы ресурсов, потребляющие тело запроса другими способами, не будут работать должным образом.

(я тестировал до и после отключения всех сервлетов фильтров. Я не использую какие-Джерси фильтры)

+0

Вы используете реализацию по умолчанию JAX-RS (без внешней библиотеки) в Glassfish 4? –

+0

Да, я использую Glassfish в комплекте Джерси для запуска проекта. – siva636

+0

Я получаю такие же проблемы .. как это было исправлено – Vish

ответ

2

Вы получаете это сообщение, если тело запроса с формой данных уже потребляли по телефону HttpServletResponse.getParameter (ParamName). Это может произойти, если какой-либо зарегистрированный фильтр сервлетов вызвал этот метод. Джерси ContainerRequestFilter не может влиять на него. Поэтому я предлагаю изучить конфигурацию вашего развертывания (web.xml). Я протестировал инъекционную форму Form с черным 2.5-SNAPSHOT и Glassfish 4 night build (glassfish-4.0.1-b04-12_04_2013), и он работает.

Если тело запроса уже использовано, вы все равно можете использовать параметры формы, но вы не можете вводить их в качестве объекта (например, в вашем коде). Если параметры потребляются, вы можете вводить параметры с помощью @FormParam JAX-RS аннотации:

@POST 
@Consumes("application/x-www-form-urlencoded") 
public String postForm(@FormParam("paramKey") String paramValue) { 
    return paramValue; 
} 
Смежные вопросы