私はSpring 3.2を使用しており、ajax postリクエストを使用してjsonオブジェクトの配列を送信しようとしています。これが関連する場合、すべての特殊文字をエスケープしました。
HTTPステータス415を取得しています。
私のコントローラーは:
@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
なぜこのエラーが発生しているのですか?
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";
}
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ステータスコードの問題が解決するはずです。
Jacksonとjackson-databindをクラスパスに追加する必要があります。春はそれを使用してそれをピックアップします MappingJacksonHttpMessageConverter
JacksonのObjectMapperを使用してJSONを読み書きできるHttpMessageConverter実装。 JSONマッピングは、ジャクソンが提供する注釈を使用して、必要に応じてカスタマイズできます。さらに制御が必要な場合、特定の型に対してカスタムJSONシリアライザー/デシリアライザーを提供する必要がある場合に、ObjectMapperプロパティを介してカスタムObjectMapperを挿入できます。デフォルトでは、このコンバーターは(application/json)をサポートします。
私はconsume="application/json"
私のリクエストマッピング設定では、json入力を期待しています。 JSON入力ではないリクエストを送信したとき、Springは415 Unsupported Media Typeについて不平を言いました。したがって、consume="application/json"
私のために働いた。そのため、Springコントローラーのメソッドシグネチャのリクエスト入力とacceptメディアタイプを調べてください。不一致は415エラーをスローします。これが問題の原因である可能性が最も高いでしょう。
同じ問題がありました。この問題を解決するには、次の手順に従う必要がありました。
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。次のフィルターを作成します:
public class CORSFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String Origin = request.getHeader("Origin");
Origin = (Origin == null || Origin.equals("")) ? "null" : Origin;
response.addHeader("Access-Control-Allow-Origin", Origin);
response.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Headers",
"Authorization, Origin, content-type, accept, x-requested-with");
filterChain.doFilter(request, response);
}
}
。web.xmlのリクエストに上記のフィルターを適用します
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>com.your.package.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
これが誰かに役立つことを願っています。
私は同じ問題を抱えていました。spring-servlet.xmlに次のコード行を追加しました。これはこのxmlファイルのほぼ最後にありました。動いた。 <mvc:annotation-driven />
データ型のjson
をapplication/json
に変更してみてください。そして、あなたのjsonはどのように見えますか 有効 ? jsonがString []に変換されるのを見たことがないので、この問題も問題です。