В следующем коде я делаю запрос от JQuery на метод «сохранить» на сервере JAX-RS с параметром userId. Этот JQuery запускается из расширения Google Chrome (эта же проблема при тестировании с localhost).Параметры, которые не были получены по запросу POST с сервера JQuery на Java (JAX-RS)
index.html (внутри расширения Chrome)
<script>
$.post('https://example.com:8082/save', { userId: 'myuser' })
.done(function(data) {
console.log(data);
});
</script>
Запрос получен, но я всегда получаю сообщение об ошибке ERROR: user not specified
(см. Ниже)
сторона JAX-RS Сервер
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/save")
public Response save(@FormParam("userId") String userId) {
if(userId == null) {
return Response.ok("ERROR: user not specified", MediaType.APPLICATION_JSON).build();
}
else {
[...]
}
}
Я испытал тот же запрос от CURL и он хорошо работает.
curl --data "userId=myuser" https://example.com:8082/save
Chromebook-Debug
Request URL:https://example.com:8082/save
Request Method:POST
Status Code:200 OK
Remote Address:131.224.32.213:8082
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://myteam.slack.com
Access-Control-Allow-Credentials: true
Content-Type: application/json
Content-Length: 25
Date: Wed, 14 Sep 2016 17:33:05 GMT
Connection: close
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en,es;q=0.8
Connection:keep-alive
Content-Length:16
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:example.com:8082
Origin:https://myteam.slack.com
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36
userId=myuser
EDIT: Возможно ли, что это могло быть вызвано правило CORS? Обычно я получаю запрос POST, но никаких параметров. Это мои фильтры на Tomcat. Нужны ли какие-либо заявления CORS на JAX-RS?
Tomcat8 конф/web.xml
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Посмотрите в своем браузере инструменты разработчика. Как выглядит тело? –
Возможный дубликат [Извлечение параметров с использованием JAX-RS и jquery .ajax()] (http://stackoverflow.com/questions/13275318/retrieving-parameters-using-jax-rs-and-jquery-ajax) –
@AlexeySoshin Я добавил «@Consumes», как указано в вашей ссылке, но я получаю ту же ошибку. Я обновил свой вопрос с дополнительной информацией – Arturo