2016-09-14 1 views
1

В следующем коде я делаю запрос от 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> 
+0

Посмотрите в своем браузере инструменты разработчика. Как выглядит тело? –

+1

Возможный дубликат [Извлечение параметров с использованием JAX-RS и jquery .ajax()] (http://stackoverflow.com/questions/13275318/retrieving-parameters-using-jax-rs-and-jquery-ajax) –

+0

@AlexeySoshin Я добавил «@Consumes», как указано в вашей ссылке, но я получаю ту же ошибку. Я обновил свой вопрос с дополнительной информацией – Arturo

ответ

1

Я сделал это работать с XMLHttpRequest вместо этого. Вероятно, вставка заголовка содержимого изменила ситуацию? Это рабочий код:

var http = new XMLHttpRequest(); 
var url = "https://example.com:8082/save"; 
var params = "userId=myuser"; 
http.open("POST", url, true); 

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     alert(http.responseText); 
    } 
} 
http.send(params); 
+0

Предполагается, что для jQuery по умолчанию используется «application/x-www-form-urlencoded; charset = UTF-8» – Xan