9

I have a REST call that accepts a JSON object, lets say, a person. After I create this object (validated and saved to the database), I need to return the newly created JSON Object.

I think the standard practice is to return 201 Accepted instead of returning the object immediately. But my application needs the newly created object immediately.

I have a controller methods that take a POST call, calls a service class, which in turn calls a DAO that uses Hibernate to create the object. Once it's saved to the database, I am calling another controller method that takes the ID of the person and returns the Object.

My question, is this the better approach? i.e., calling another Controller method to get the newly created object. Or the POST call itself should return the Object.

The main question is: Calling another method takes a round trip and I guess it's an overkill. (Service->DAO->Hibernate->Database). Instead I think I should get the Object from the database immediately after it's saved in the same call (from the method that handled POST).

What is the architecture standard here?

4

3 に答える 3

5

POSTのHTTP 仕様から:

リソースがオリジンサーバーで作成されている場合、応答は 201 (Created) であり、要求のステータスを記述し、新しいリソースを参照するエンティティと、Location ヘッダーを含む必要があります (セクション 14.30 を参照)。

応答本文で何を返すかは、解釈の厳密さによって異なります。an entity which describes the status of the request and refers to the new resourceまた、多くの実装では、新しく作成されたエンティティ自体の表現を返すだけです。最も重要なことはLocation、応答のヘッダーを新しく作成されたリソースの URI に設定することです。これにより、クライアントは選択した場合にすぐに取得できるようになります。

于 2013-04-21T05:55:57.130 に答える
0

@ResponseStatus の後、@ResponseBody を使用して永続化した直後にエンティティ オブジェクトを返すことができますが、これは標準ではないため、クライアントはこのカスタマイズを認識する必要があります。 void を返すことによって。

于 2013-04-21T06:49:23.690 に答える