0

jqueryを使用するWebインターフェイスを備えたjersey(java)による単純なレストサーバーを取得しました。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 ドキュメントを読みました。残りのサーバーは 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 に答える