[解決済み] Spring JSON リクエストが 406 (not Acceptable) になる。
質問
これは私のjavascriptです。
function getWeather() {
$.getJSON('getTemperature/' + $('.data option:selected').val(), null, function(data) {
alert('Success');
});
}
これは私のコントローラです。
@RequestMapping(value="/getTemperature/{id}", headers="Accept=*/*", method = RequestMethod.GET)
@ResponseBody
public Weather getTemparature(@PathVariable("id") Integer id){
Weather weather = weatherService.getCurrentWeather(id);
return weather;
}
spring-servlet.xml
<context:annotation-config />
<tx:annotation-driven />
このようなエラーが発生します。
GET http://localhost:8080/web/getTemperature/2 406 (Not Acceptable)
ヘッダです。
レスポンスヘッダ
Server Apache-Coyote/1.1
Content-Type text/html;charset=utf-8
Content-Length 1070
Date Sun, 18 Sep 2011 17:00:35 GMT
リクエストヘッダ
Host localhost:8080
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept application/json, text/javascript, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection keep-alive
X-Requested-With XMLHttpRequest
Referer http://localhost:8080/web/weather
Cookie JSESSIONID=7D27FAC18050ED84B58DAFB0A51CB7E4
興味深いメモです。
私は406エラーを得ますが、ハイバーネートクエリは一方で動作します。 これは、ドロップボックスの選択を変更したときに、毎回、tomcatログに表示されるものです。
select weather0_.ID as ID0_0_, weather0_.CITY_ID as CITY2_0_0_, weather0_.DATE as DATE0_0_, weather0_.TEMP as TEMP0_0_ from WEATHER weather0_ where weather0_.ID=?
何が問題なのでしょうか?以前SOで似たような問題が2つあり、そこで受け入れられたヒントをすべて試しましたが、うまくいかなかったようです...。
何か提案はありますか?遠慮なく質問してください...
どのように解決するのですか?
<ブロッククオート406 受け入れられません
リクエストによって特定されたリソースは、リクエストで送信された accept ヘッダによって受け入れ不可能なコンテンツ特性を持つレスポンスエンティティを生成することができるだけです。
つまり、リクエストのacceptヘッダがapplication/jsonで、コントローラがそれを返すことができないということです。これは、@ResponseBody アノテーションの返り値を満たす正しい HTTPMessageConverter が見つからない場合に起こります。HTTPMessageConverter は、HTTP レスポンスメソッドを使用する際に自動的に登録されます。
<mvc:annotation-driven>
を使用すると、クラスパスに特定の 3 次元パーティ・ライブラリが与えられると、HTTPMessageConverter が自動的に登録される。
クラスパスに正しい Jackson ライブラリーがないか、あるいは
<mvc:annotation-driven>
ディレクティブを使用していないかです。
あなたのシナリオを再現してみましたが、この二つのライブラリを使ってうまくいきました。
headers="Accept=*/*"
ディレクティブは使用しません。
- jackson-core-asl-1.7.4.jar
- ジャクソン・マッパー・アスル-1.7.4.jar
関連
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
Uncaught ReferenceError: は定義されていません。
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
[解決済み】「datetime.datetime not JSON serializable」を克服する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
executeQuery()でデータ操作文が発行できない。解決方法
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
Java Runtime Environmentを継続するためのメモリが不足しています。