15

Spring 3.2 を使用しており、ajax 投稿リクエストを使用して json オブジェクトの配列を送信しようとしています。これが関係する場合、すべての特殊文字をエスケープしました。

415 の HTTP ステータスを取得しています。

私のコントローラーは:

@RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json")
    public @ResponseBody String saveProfileJson(@RequestBody String[] profileCheckedValues){
        System.out.println(profileCheckedValues.length);
        return "success";
    }

jquery は次のとおりです。

jQuery("#save").click(function () {
        var profileCheckedValues = [];
        jQuery.each(jQuery(".jsonCheck:checked"), function () {
            profileCheckedValues.push($(this).val());
        });
        if (profileCheckedValues.length != 0) {
            jQuery("body").addClass("loading");
            jQuery.ajax({
                type: "POST",
                contentType: "application/json",
                url: contextPath + "/sample/save-profile",
                data: "profileCheckedValues="+escape(profileCheckedValues),
                dataType: 'json',
                timeout: 600000,
                success: function (data) {
                    jQuery('body').removeClass("loading");
                },
                error: function (e) {
                    console.log("ERROR: ", e);
                    jQuery('body').removeClass("loading");
                }
            });
        }
    });

私が投稿している配列のオブジェクトの 1 つの例は、次の json です。

{
  "id": "534213341",
  "name": "Jack Lindamood",
  "first_name": "Jack",
  "last_name": "Lindamood",
  "link": "https://www.facebook.com/jack",
  "username": "jack",
  "gender": "male",
  "locale": "en_US",
  "updated_time": "2013-07-23T21:13:23+0000"
}

エラーは次のとおりです。

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method

なぜこのエラーが発生するのですか - 誰か知っていますか?

4

7 に答える 7

7

で試すことができHttpServletRequestます。問題ありません

  @RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json",headers = "content-type=application/x-www-form-urlencoded")
    public @ResponseBody String saveProfileJson(HttpServletRequest request){
       System.out.println(request.getParameter("profileCheckedValues"));
        return "success";
    }
于 2013-08-08T06:37:47.927 に答える
6

1) 次の依存関係を追加します

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson-version}</version> // 2.4.3
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson-version}</version> // 2.4.3
</dependency>

2) コントローラーメソッドで @RequestBody アノテーションを使用している場合は、xml ファイルに以下を追加したことを確認してください。

<mvc:annotation-driven />

これにより、415 ステータス コードの問題が解決されます。

于 2016-08-11T10:51:46.397 に答える
3

クラスパスに jackson と jackson-databind を追加する必要があります。春はそれを使ってそれを拾いますMappingJacksonHttpMessageConverter

MappingJacksonHttpMessageConverter

Jackson の ObjectMapper を使用して JSON を読み書きできる HttpMessageConverter 実装。JSON マッピングは、Jackson が提供する注釈を使用して、必要に応じてカスタマイズできます。さらに制御が必要な場合は、カスタム JSON シリアライザー/デシリアライザーを特定の型に提供する必要がある場合に、ObjectMapper プロパティを介してカスタム ObjectMapper を挿入できます。デフォルトでは、このコンバーターは (application/json) をサポートしています。

于 2013-08-07T12:53:36.163 に答える
2

私はconsume="application/json"json入力を期待するリクエストマッピング構成を持っていました。JSON 入力ではないリクエストを送信すると、Spring は 415 Unsupported Media Type について不平を言いました。consume="application/json"だから私のために働いたのを削除します。そのため、Spring コントローラー メソッド シグネチャのリクエスト入力と受け入れメディア タイプを調べてください。不一致があると、415 エラーがスローされます。これが問題の原因である可能性が最も高いでしょう。

于 2016-03-21T11:25:16.793 に答える
0

for データ型に変更jsonしてみてください。application/jsonそして、あなたのjsonはどのように見えますか? json が String[] に変換されるのを見たことがないので、これも問題になる可能性があります。

于 2013-08-07T11:42:38.307 に答える