2013-04-05 4 views
0

Я пытаюсь опубликовать некоторые данные json для веб-сервиса REST, реализованного с использованием фрейма Jersey. Я не использую JAXB или jquery, а только javascript.
Я подтвердил, что сформированный json правильный, но, несмотря на настройку типа контента «application/json», на сервере он получен как «application/x-www-form-urlencoded».
Вот мой код:POST JSON to Jersey Service

<html> 
<head> 
<script type="text/javascript"> 
    function DisplayFormValues() 
    { 
     var str = {}; 
     var elem = document.getElementById('frmMain').elements; 

     //alert(elem.length); 
     for(var i = 0; i < elem.length-1; i++) 
     { 
      str[elem[i].name] = elem[i].value; 

     } 
     document.getElementById('lblValues').innerHTML = str; 

     var json = JSON.stringify(str); 

     // construct an HTTP request 
     var xhr = new XMLHttpRequest(); 
     xhr.open(document.getElementById('frmMain').method, 
       document.getElementById('frmMain').action); 
     xhr.setRequestHeader("Content-type", "application/json"); 
     xhr.setRequestHeader("Content-Length",json.length); 
     xhr.setRequestHeader('Accept', 'application/json'); 


     //alert(json); 
     // send the collected data as JSON 
     xhr.send(json); 


     xhr.onloadend = function() { 
      // done 
     } 
    } 
</script> 
</head> 
<body> 
    <form id="frmMain" name="frmMain" action="/JerseyTest/rest/postUser" 
     method="post"> 

     <input name="firstName" value="harry" /> <input name="lastName" 
      value="tester" /> <input name="toEmail" value="[email protected]" /> 
     <br /> <input type="submit" value="Test" 
      onclick="DisplayFormValues();" /> 
    </form> 
    <hr /> 
    <div id="lblValues"></div> 
</body> 
</html> 

На стороне сервера:

package com.example.jersey.test; 


import javax.ws.rs.*; 

@Path("/postUser") 
public class JsonTest { 

    @POST 
    @Consumes("application/json") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String pingPong(String json) { 

     return "Answer is "+ json; 
    } 
} 

Я новичок в веб-разработке и не уверены в том, что мне не хватает в коде выше.

+1

Это с бедра, но вы пробовали использовать «t» в «Content-Type»? –

+0

Это было только в кепках, но после проверки заголовок запроса пытался с небольшим «t». Еще не повезло. – Ashwini

ответ

0

Я отвечаю на свой вопрос для тех, кто может посетить это позже. Вышеприведенный код верен и работает хорошо, за исключением того, что URL-адрес дважды ударил. В первый раз для действия кнопки отправки по умолчанию, а затем согласно нашему скрипту с помощью XMLHttpRequest.
Это я узнал после того, как проверил заголовки в Httpfox, который показал ошибку как NS_BINDING_ABORTED.
После изменения типа ввода на кнопку из submit все работает нормально.