2010-08-24 3 views
8

J'essaie de développer une méthode dans mon service Web RESTful en Java pour insérer plusieurs entrées dans une base de données MySQL en utilisant la requête POST. Le service Web RESTful généré a une méthode pour insérer une seule entité, mais pas plusieurs. Par exemple, il accepte:RESTful en utilisant Jersey: méthode pour POST plusieurs entités

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

Mais pas (ce que je voudrais):

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

Je devine que vous avez à boucle à travers les entités, mais ne savez pas comment la mettre en œuvre, être un novice honteux.

Répondre

5

J'ai juste couru dans ce moi-même. J'ai besoin de publications transactionnelles de plusieurs articles, il n'est donc pas question d'itérer sur le client. Le consensus semble être que vous devez utiliser un chemin différent de vos ressources normales:

http://chasenlehara.com/blog/creating-restful-web-services/ (Multi-ressources)

RESTful way to create multiple items in one request

Je ne pouvais pas trouver beaucoup sur la façon de le faire avec Jersey , bien que. En fin de compte, c'est assez facile. Vous devriez déjà avoir des classes de conversion et de ressources multi-entités pour les requêtes GET, il vous suffit de spécifier un chemin où le serveur peut supposer qu'il va les recevoir:

@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); 
     } 
    } 

Ensuite, au lieu de poster

<creature /> 

à

http://.../resources/creatures 

Vous posterais

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

à

http://.../resources/creatures/multi 
Questions connexes