2010-08-24 16 views
8

Estoy tratando de desarrollar un método en mi servicio web RESTful en Java para insertar múltiples entradas en una base de datos MySQL utilizando la solicitud POST. El servicio web RESTful generado tiene un método para insertar una sola entidad, pero no múltiples. Por ejemplo, se acepta:RESTful usando Jersey: método para POST múltiples entidades

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

Pero no (lo que me gustaría):

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

supongo que tiene que recorrer las entidades, pero no sabe cómo ponerlo en práctica, siendo un novato vergonzoso

Respuesta

5

Acabo de toparme con esto yo mismo. Necesito publicaciones transaccionales de varios elementos, por lo que iterar en el cliente está fuera de cuestión. El consenso parece ser que es necesario utilizar una ruta separada de sus recursos normales:

http://chasenlehara.com/blog/creating-restful-web-services/ (multi-recursos)

RESTful way to create multiple items in one request

no pude encontrar mucho acerca de cómo hacer esto con Jersey , aunque. Como resultado, es bastante fácil. Usted ya debe tener convertidor y de recursos clases multi-entidad para peticiones GET, sólo tiene que especificar una ruta en la que el servidor puede asumir que va a recibirlos:

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

Entonces, en lugar de publicar

<creature /> 

a

http://.../resources/creatures 

Usted podría publicar

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

a

http://.../resources/creatures/multi 
Cuestiones relacionadas