2016-03-31 6 views
1

をJSONを送信する:406エラー私はこのようなjQueryのAJAX呼び出しを持って春のコントローラに

  $.ajax({ 
      type: "post", 
      url: url, 
      data: JSON.stringify(formSubmit), 
      contentType: "application/json", 
      dataType: "json", 
      success: function(xhr,status) { 
       console.log("Return Data:"+xhr.responseText) 
      }); 

私のコントローラは、次のようになります。

@RequestMapping(value = "/doIt", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") 
@ResponseBody 
public MyObject activityPerformed(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonData) { 
    logger.debug("JSON INPUT:"+jsonData); 
    MyObject o = new MyObject("STUFF"); 
    return o; 
} 

これは406エラーをスローします。私は私の応答ヘッダに私はこれを持っているというのが私のブラウザで見ることができます:私はマッピングの一部が固定されている必要があります生成と思っ

Content-Type:"text/html;charset=utf-8" 

ajax呼び出しの「contentType」を削除すると、406エラーは表示されませんが、URLEncodedのjsonDataパラメータが返されます。いいえ、私はデコードを行うことができると仮定していますが、それは「正しい」とは言えません。

したがって、ajax呼び出しでcontentType: "application/json"のないURLにエンコードされていないJSONをコントローラに送信するにはどうすればよいですか?

またはコントローラレスポンスのcontentTypeを設定するにはどうすればよいですか?

+0

サーバーのセキュリティログを確認しましたか?リクエストがmod_securityルールに違反した場合、Apacheはエラーを生成します。したがって、エラーを引き起こすjsonDataリクエストではない可能性があります。 – Dexter

+0

私はtomcat 8.0.30を使用しています – mmaceachran

+0

セットアップと同じ問題を抱えている別の人物:http://stackoverflow.com/questions/7462202/spring-json-request-getting-406-not-acceptable。私はあなたの設定が何であるか分かりませんが、これはエラーの原因にあなたを導く助けとなりますので、あなたはどのような詳細を提供するのか知っています。彼らはあなたと同じリクエストヘッダーを使用していませんが、答えはあなたにどのような方向を示すかもしれません。 – Dexter

答えて

0

春は、406. The Spring reference documentationとを返送する責任を負う当事者であり、これを念頭に置くのに役立ちます。参照資料から

[についてはフィールドを生成]要求が受け入れ要求ヘッダーは、これらの値のいずれかと一致する場合にのみ一致します。

私はあなたが適切なAccept request header (sec 14.1)アプリケーション/ JSONの値;のcharset = UTF-8)を追加した場合、あなたは、もはや406のHTTPステータスコードを取得する期待しないだろう、あなたのAJAX要求に。