2011-12-01 7 views
6

Spring 3.0でRESTful Webサイトを作成しています。私はContentNegotiatingViewResolverとHTTPメッセージコンバータ(JSONの場合はMappingJacksonHttpMessageConverter、XMLの場合はMarshallingHttpMessageConverterなど)を使用しています。最後のURLで.xmlサフィックスを使用し、JSONの場合にURLの.jsonサフィックスを使用すると、XMLコンテンツを正常に取得できます。Spring REST ControllerでRequestBodyを使用したXML/JSON POST

コントローラからXML/JSONコンテンツを取得しても問題は発生しません。しかし、同じコントローラメソッドのリクエストボディでXML/JSONをどのようにPOSTできますか?

@RequestMapping(method=RequestMethod.POST, value="/addEmployee") 
    public ModelAndView addEmployee(@RequestBody Employee e) { 
     employeeDao.add(e); 
     return new ModelAndView(XML_VIEW_NAME, "object", e); 
} 

答えて

11

JSON(またはXML)を返すためにビューを使用しないでくださいが、@ ResponseObseアノテーションを使用することを検討してください。従業員が返されるべきものである場合は、この(ノート、テストされていない)のようなメソッドの定義と実装を使用する場合は、春とMappingJacksonHttpMessageConverterは自動あなたのEmployeeオブジェクトをJSONに変換します:reply.Iため

@RequestMapping(method=RequestMethod.POST, value="/addEmployee") 
    @ResponseBody 
    public Employee addEmployee(@RequestBody Employee e) { 
    Employee created = employeeDao.add(e); 
    return created; 
    } 
+0

感謝」をすぐにこれを試してみてください:) –

+0

Stoffer、私は道を試みた、あなたは答えている。しかし、私はどのような 要求のボディのコントローラメソッドにXML/JSONのコンテンツをPOSTしようとしました。私はそこから例外 を取得しています すなわち ** HTTPステータス400 - コンテンツタイプ「text/plainの;のcharset = UTF-8」** 私はContentNegotiatingViewResolverと のHttpメッセージ変換器の両方を使用していますので、それはありますがサポートされていません??この背後には何か他の理由があります。 –

+4

Springのコンバーターは、特定のコンテンツタイプ(要求本体用)と受け入れ(応答用)を登録します。 jsonの場合は、 'application/json'などです。 XMLの場合、 'application/xml'やその他のものです。あなたのクライアントが 'content-type:application/json'と' accept:application/json'を送信し、それが動作することを確認してください。 –

関連する問題