Я хотел бы задать вопрос, связанный с проблемой, с которой я столкнулся при развертывании веб-приложений 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
}
Если кто-нибудь знает, как решить эту проблему, пожалуйста, дайте мне знать. Большое спасибо.
Вы можете не использовать команду '@ FormParam' аннотацию, чтобы ввести параметры вместо того, чтобы использовать карту? Кроме того, возможно, стоит добавить один «@ FormParam» в дополнение к «MultivalueMap», чтобы убедиться, что это не позволяет использовать параметры (например, добавить '@FormParam (« unused ») String unused', но продолжать использовать карта) – DannyMo
Спасибо за отзыв. '@ FormParam' отлично работал для' @ POST' и '@ PUT' для ввода параметров. Я попытался добавить один '@ FormParam' в дополнение к' MultivaluedMap' для '@ POST', но переменная' MultivaluedMap' по-прежнему пуста. Причина, по которой я использую 'MultivaluedMap' вместо' @ FormParam', заключается в том, что мне нужно разрешить ресурсу обрабатывать несколько параметров, не будучи известным в расширенном ('@ FormParam' ограничивает число и имена параметров). В настоящее время я отказываюсь от более старой Glassfish 3.1.2.2 и развертываю приложение без проблем. –