JAX-RS manejo de múltiples solicitudes con la misma ruta.
Estoy desarrollando esta aplicación en JAX-RS (rest-easy) en la cual tengo una ruta de actualización PUT.
http://…/update/{resource_id}
En esta ruta puedes realizar algunas solicitudes, como ChangeNameRequest o ChangeStyleRequest, cada solicitud tiene esta estructura:
public class ChangeNameRequest{
public String newName;
}
public class ChangeStyleRequest{
public String newStyle;
}
Y luego en la clase de controlador tengo estos métodos:
@Path(“/update/{id}”)
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public Response changeName(ChangeNameRequest request, @PathParam(“id”) String id)
y
@Path(“/update/{id}”)
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public Response changeArtworkStyle(ChangeStyleRequest request, @PathParam(“id”) String id) {
El problema es que cuando hago una solicitud JSON como esta:
{
“newname” : “Nombre cambiado”
}
Elige de forma no determinista entre uno de los métodos de manejo de solicitud, lo que genera un error.
¿Cómo puedo solucionar esto? (Tal vez solo puedo agregar un campo de tipo de solicitud o algo así, pero me gustaría saber si hay algunas mejores prácticas o soluciones mejores para manejar esto).
davy.ai
Para solucionar el comportamiento no determinista de JAX-RS al elegir el método incorrecto de manejo de solicitudes, puedes diferenciar las solicitudes utilizando diferentes rutas de punto final para cada tipo de solicitud. Por ejemplo, puedes tener:
Alternativamente, si prefieres mantener la misma ruta de punto final, puedes diferenciar las solicitudes agregando un campo de tipo de solicitud en el cuerpo de la solicitud. Por ejemplo:
Luego, en la clase del controlador, puedes verificar el tipo de solicitud y llamar al método apropiado. Por ejemplo:
De esta manera, puedes manejar ambas solicitudes en la misma ruta de punto final mientras las diferencias según el tipo de solicitud.</string,>