POST REST服务不响应我的ajax jquery调用(GET是的,确实如此)

时间:2012-12-11 20:27:18

标签: java ajax rest jersey

我有一个简单的休息服务器由jersey(java)和使用jquery的web界面。我有一个用于GET和POST模式的REST服务。 POST调用不起作用,它在输入数据端有一个json对象并返回一个json数据。

异常消息:

A message body reader for Java class ....RESTTaskDataInput, and Java type class ....RESTTaskDataInput, and MIME media type application/x-www-form-urlencoded; charset=UTF-8 was not found.

The registered message body readers compatible with the MIME media type are:

application/x-www-form-urlencoded; charset=UTF-8 ->
  com.sun.jersey.core.impl.provider.entity.FormProvider...

发布呼叫的Jquery代码(点击按钮进行通话):

        $("#task-launcher-post").click(function()
        {                
            $("div#result").text(""); 
            $.ajax({ 
                type: "POST",                    
                url: "resources/foo", <= This is OK, the rest interface is under that
                data: {
                    code: "1234",
                    email: "my@email.com"
                },
                dataType: "json",                    
                success: function(result)
                {   
                    $("div#result").append('...');
                },
                error: function(xml,result)
                {
                    $("div#result").append('...');                    
                }
            });                                            
        });

Java REST服务代码

@Path("/foo")
public class RESTSERVICECrawler 
{
   ...

   @POST    
   @Consumes("application/json")
   @Produces("application/json")
   public RESTLaunchResult launch(RESTTaskDataInput input) 
   {                
      RESTLaunchResult result = new RESTLaunchResult();
      ...
      return result;
   }

}

Java RESTTaskDataInput代码(输入端使用的数据)

@XmlRootElement
public class RESTTaskDataInput 
{ 
   public String code;    
   public String email;        
}

GET调用与url参数一起使用,但POST不在输入中使用json。我不知道为什么,我读了ajax的jquery文档,我认为rest服务器无法理解json输入数据。

2 个答案:

答案 0 :(得分:0)

尝试:

public RESTLaunchResult launch(JAXBElement<RESTTaskDataInput> input)  {
    try {
        RESTTaskDataInput data = input.getValue();
    } ...
}

答案 1 :(得分:0)

感谢查理指示的解决方案。需要设置contentType。

                var data = {
                   code: "123",
                   email: "email"
                }

                $.ajax({
                    type: "POST",                    
                    url: "resources/foo",
                    data: JSON.stringify(data),
                    dataType: "json",         
                    contentType: 'application/json',
                    success: function(result)
                    {   
                        $("div#result").append('<h5 id="result" class="text-success">' + result.success + " " + result.message + '</h5></div>');
                    },
                    error: function(xml,result)
                    {
                        $("div#result").append('<h5 id="result" class="text-error">' + result + '</h5>');     
                    }
                });