2013-07-31 1 views
1

Я хотел бы задать вопрос, связанный с проблемой, с которой я столкнулся при развертывании веб-приложений Glassfish 4.0.Glassfish 4.0 JAX-RS пустой HTTP POST MultivaluedMap параметры формы

Я создал приложение REST Web-сервиса с JAX-RS и развернул его на Glassfish 3.1.2 без проблем. Недавно я попробовал развернуть его на Glassfish 4.0 и столкнулся с предупреждением следующим образом.

A servlet request to the URI http://localhost:8080/IipDev3/root/provider/publication/info:647254662 contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected. 

Я использую javax.ws.rs.core.MultivaluedMap для хранения параметров формы, но это действительно пустые запросы HTTP POST. Как ни странно, он не пуст для запросов HTTP PUT. Я попытался найти решения в Интернете, но застрял (в худшем случае я могу, конечно, вернуться к Glassfish 3.1.2).

Фрагменты кода:

@POST 
@Path("publication/{infoId}") 
@Consumes("application/x-www-form-urlencoded") 
@Produces("application/xml") 
public String publishToAnInformationChannel(@PathParam("infoId") String infoId, 
MultivaluedMap formParams, @Context SecurityContext sc) { 
// formParams empty + warning 
} 

@PUT 
@Path("registration/information/{infoId}") 
@Consumes("application/x-www-form-urlencoded") 
@Produces("application/xml") 
public String updateAnInformationChannel(@PathParam("infoId") String infoId, 
MultivaluedMap formParams, @Context SecurityContext sc) { 
// formParams filled in + no warning 
} 

Если кто-нибудь знает, как решить эту проблему, пожалуйста, дайте мне знать. Большое спасибо.

+0

Вы можете не использовать команду '@ FormParam' аннотацию, чтобы ввести параметры вместо того, чтобы использовать карту? Кроме того, возможно, стоит добавить один «@ FormParam» в дополнение к «MultivalueMap», чтобы убедиться, что это не позволяет использовать параметры (например, добавить '@FormParam (« unused ») String unused', но продолжать использовать карта) – DannyMo

+0

Спасибо за отзыв. '@ FormParam' отлично работал для' @ POST' и '@ PUT' для ввода параметров. Я попытался добавить один '@ FormParam' в дополнение к' MultivaluedMap' для '@ POST', но переменная' MultivaluedMap' по-прежнему пуста. Причина, по которой я использую 'MultivaluedMap' вместо' @ FormParam', заключается в том, что мне нужно разрешить ресурсу обрабатывать несколько параметров, не будучи известным в расширенном ('@ FormParam' ограничивает число и имена параметров). В настоящее время я отказываюсь от более старой Glassfish 3.1.2.2 и развертываю приложение без проблем. –

ответ

0

MultivaluedMap нужна общая информация:

MultivaluedMap<String, String> formParams 
Смежные вопросы