0

我有一个简单的 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 输入数据。

4

2 回答 2

0

尝试:

public RESTLaunchResult launch(JAXBElement<RESTTaskDataInput> input)  {
    try {
        RESTTaskDataInput data = input.getValue();
    } ...
}
于 2012-12-11T20:49:31.223 回答
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>');     
                    }
                });
于 2012-12-11T22:37:40.140 回答