2012-03-24 14 views
0

私はRESTfulなサービスとその実装を春3に初めて導入しました。クライアントがサーバーに新しいリソースを作成したときにタイプを返すベストプラクティスについて意見したいと思います。Spring 3 POSTでのRESTfulリターン

@RequestMapping(method = RequestMethod.POST, 
value = "/organisation", 
headers = "content-type=application/xml") 
@ResponseStatus(HttpStatus.CREATED) 
public ??? createOrganisation(@RequestBody String xml) 
{ 
    StreamSource source = new StreamSource(new StringReader(xml)); 
    Organisation organisation = (Organisation) castorMarshaller.unmarshal(source); 
    // save 
    return ???; 
} 

答えて

0

簡単な選択肢は、Java EE自身のRESTfulサービスパッケージで見つかったjavax.ws.rs.core.Response、だろう。これは、単純に、WebサーバーがHTTP要求に応答する必要があることを示します。例えば :

if (organisation != null) 
    return Response.ok().build(); 
else 
    return Response.serverError().build(); 

カスタムレスポンスヘッダと、そのような他のエキゾチックなものがあまりにもその戻り値の型で可能ですが、私はそれが「ベストプラクティス」と一致とは思いません。


ええと、私は...私は私の答えはヘルプの多くはなかったと思います@ResponseStatus(HttpStatus.CREATED)ことを逃しました。

多分これは代わりに役立ちます:How to return generated ID in RESTful POST?

+0

これは役立つでしょうhttp://stackoverflow.com/questions/12837907/what-to-return-if-spring-mvc-controller-method-doesnt-return-value – Xiangyu

0

ResponseEntityに包まれた(生成されたIDを持つ)新しく作成されたエンティティを返すために、良いアイデアです。また、操作の結果に基づいてResponseEntityのHttpStatusを設定することもできます。

 @RequestMapping(method = RequestMethod.POST, 
     value = "/organization", 
     headers = "content-type=application/xml") 
    public ResponseEntity<Organization> createOrganisation(@RequestBody String xml) { 
      StreamSource source = new StreamSource(new StringReader(xml)); 
      Organization organisation = (Organization) castorMarshaller.unmarshal(source); 
      // save 
      return new ResponseEntity<Organization>(organization, HttpStatus.OK); 
     } 
0

私はResponseEntity<byte[]>のために行くだろうし、あなたのコントローラの方法であなたの応答のマーシャリングの世話をする必要があります。 MVCのVを基本的に廃止していることに注目してください.MarshallingViewがSpring上にありますが、経験から私は以前のソリューションをはるかに柔軟で分かりやすいものと考えています。