2017-07-21 13 views
2

私はSpring MVCアプリケーションで作業しており、私が制御できないクライアントを持っています。このクライアントはJSONデータをポストしていますが、application/x-www-form-urlencodedヘッダーを送信しています。 Springは当然このヘッダーを信頼してデータを受け取ろうとしますが、そのJSONのためにはできません。 Springが受け取ったヘッダーをオーバーライドした経験がありましたか、ヘッダーに関係なく、どんなタイプのデータが来ているのか正確に指定していましたか?Spring MVCオーバーライド受信コンテンツタイプ

答えて

2

あなたは2つのことができます。

  1. 変更Content-Type: application/jsonヘッダ
  2. を送信するクライアントは、スプリングコントローラとヘッダContent-Typeをチェックの上にあるサーブレットフィルタやSpringインターセプターを書きます。 application/jsonでなければ、application/jsonに変更します。
+2

3 'HttpServletRequest'のタイプのパラメータを追加することによって、手動でペイロードを読む、または' Reader'、または 'InputStream'、または' @RequestBody文字列 '、または... – Andreas

+0

ありがとう! '@RequestBody String'ルートは、私の使用例に最も適しているので、終わりました。 – rreichel

0

なぜapplication/x-www-form-urlencodedリクエストを処理するために別のコントローラを書かないのですか?リクエストが有効なJSONの場合、解析して適切なサービスに転送できます。

このようにして、今後、有効なJSONではない同じタイプのリクエストを受け取ったケースを処理することもできます。

@RequestMapping(value = "/handleURLEncoded", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
public @ResponseBody Object handleURLEncoded(HttpEntity<String> httpEntity) { 
    String json = httpEntity.getBody(); 
    //now you have your request as a String 
    //you can manipulate it in any way 

    if(isJSONValid(json)) { 
     JSONObject jsonObj = new JSONObject(json); 
     //forward request or call service directly from here 
     //... 
    } 

    //other cases where it's not a valid JSON 
} 

this答えからコピーisJSONValid()方法

関連する問題