0

Krams の例に従ってください。以下は何を返しますか。Person オブジェクトは、送信されたリクエストのヘッダーに基づいて JSON または XML に変換されますか?

 @RequestMapping(value = "/person", 
           method = RequestMethod.POST, 
           headers="Accept=application/xml, application/json")
 public @ResponseBody Person addPerson(@RequestBody Person person) {
     logger.debug("Provider has received request to add new person");

     // Call service to here
     return personService.add(person);
    }

したがって、データを json として送信すると、json が返されます。xml についても同じです。それとも何か他のことが起こっていますか?

4

2 に答える 2

2

Accepthttpリクエストヘッダーに依存します。json の場合は json を取得し、xml の場合は xml を取得します。

それはまさにあなたのコードのこの部分が言っていることです.:

....
headers="Accept=application/xml, application/json")
...

ある MIME タイプを送信し、別の MIME タイプを問題なく受信できます。

編集

headersproduces/の両方のconsumesパラメーターは、リクエストマッピングによって生成/消費できるもののみを示します。特定のシリアル化を強制するものではありません。リクエスト/レスポンスのタイプは、リクエスト ヘッダーで完全に決定されます。producesディスパッチャーがリクエスト ヘッダーに一致するand (またはヘッダー) とのマッピングを見つけられない場合consumes、エラーが発生します。

于 2012-04-17T08:40:50.823 に答える
0

@RequestMapping への「headers」、「produces」、および「consumes」パラメーターは、パズルの 1 つのピースです。これらは、フレームワークが着信リクエストをルーティングし、ヘッダーの値に基づいてリクエストを区別するのに役立ちます。

このパズルのもう 1 つの部分は、アプリケーションで構成される一連のMessageConvertersです。この例のコントローラー ハンドラー メソッドはオブジェクトを返すだけであり、フレームワークはオブジェクトを何らかのテキスト表現 (つまり、XML または JSON) に変換する方法を知る必要があります。MessageConverters は、インバウンド側 (@RequestBody でアノテーションが付けられたパラメーター) とアウトバウンド側 (メソッドの戻り値に @ResponseBody でアノテーションが付けられた場合) で使用されます。適切な MessageConverter は、着信要求のメディア タイプに基づいて、フレームワークによって選択されます。

Spring XML 構成ファイルで <mvc:annotation-driven> 名前空間を使用する場合、または Java 構成クラスで @EnableMvc アノテーションを使用する場合、MessageConverters は JSON および XML をサポートし、自動的に構成されます。

于 2012-04-20T21:03:50.180 に答える