8

POST リクエストを使用して MySQL DB に複数のエントリを挿入する Java の RESTful Web サービスでメソッドを開発しようとしています。生成された RESTful Web サービスには、単一のエンティティを挿入するメソッドがありますが、複数のエンティティは挿入できません。たとえば、次を受け入れます。

<creature>
  <sort>Mouse</sort> 
  <name>Pinky</name>
</creature>

しかし、そうではありません(私が望むもの):

<creature>
  <sort>Mouse</sort> 
  <name>Pinky</name>
</creature>
<creature>
  <sort>Elephant</sort> 
  <name>Dumbo</name>
</creature>

エンティティをループする必要があると思いますが、恥ずべき初心者であるため、実装方法がわかりません。

4

1 に答える 1

5

自分でこれに遭遇しただけです。複数のアイテムのトランザクション投稿が必要なので、クライアントで繰り返すことは問題外です。コンセンサスは、通常のリソースとは別のパスを使用する必要があるということのようです。

http://chasenlehara.com/blog/creating-restful-web-services/(マルチリソース)

1つのリクエストで複数のアイテムを作成するRESTfulな方法

しかし、Jerseyでこれを行う方法についてはあまりわかりませんでした。結局のところ、それは非常に簡単です。GETリクエスト用のマルチエンティティコンバーターとリソースクラスがすでにあるはずです。サーバーがそれらを受信すると想定できるパスを指定する必要があります。

@Path("creatures")
@Stateless
public class CreaturesResource {

...

    @POST
    @Consumes({"application/xml", "application/json"})
    public Response post(CreatureConverter data) {
       Creature entity = data.resolveEntity(em);
        postCreature(entity);
    }

    @POST @Path("multi")
    @Consumes({"application/xml", "application/json"})
    public Response postMulti(CreaturesConverter data) {
       Collection<Creature> entities = data.getEntities();
       for (Creature c : entities) {
            postCreature(c);
       }
    }

その後、投稿する代わりに

<creature />

http://.../resources/creatures

投稿します

<creatures>
    <creature />
    <creature />
</creatures>

http://.../resources/creatures/multi
于 2010-12-11T11:03:33.590 に答える