es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con JAX-RS (RestEasy) al pasar un id para actualizar un objeto.

Soy nuevo en Jax-RS y tengo que crear un servicio para administrar algunos usuarios, he creado:

1) UserDAO: clase java para realizar operaciones DAO.
2) User: entidad Java con anotaciones hibernate
3) UserService: servidor Jax-Rs.

Aquí publico el código, luego la pregunta:

Entonces tengo el DAO:

Y al final de la clase de servicio:

Si quiero crear un usuario, hago esta simple solicitud POST usando insomnia: Solicitud de publicación para crear un usuario.

Crear la fila en la base de datos correspondiente, el problema es que cuando intento actualizar un usuario, por lo que hago esta solicitud:

La identificación que pasa a través de la aplicación Java es 0, no la que pasé (3 en la imagen) y realmente no sé por qué la identificación es 0, no 3 como pasé (el nombre de usuario pasado es correcto por cierto)

¿Qué estoy haciendo mal? Estoy un poco confundido, ¿debería implementar DTO/Mapper? ¿Hay algo mal en mi configuración?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que se está pasando el objeto de usuario en la solicitud de actualización. Sólo se está pasando el campo de nombre de usuario en el cuerpo de la solicitud, no el campo de identificación (id). Por lo tanto, el id del objeto de usuario en el método de actualización del DAO es 0, que es el valor por defecto para un número entero.

    Para solucionar esto, puede incluir el campo de identificación en el cuerpo de la solicitud o pasarlo como parámetro de consulta o parámetro de ruta. Por ejemplo, puede modificar el método de actualización en la clase UserService de la siguiente manera:

    @Path("/update/{id}")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response update(@PathParam("id") int id, User s) {       
        s.setId(id);
        userDaoImpl.update(s);
        return Response.ok().build();
    }
    

    Aquí, estamos pasando el id como parámetro de ruta, y estableciéndolo en el objeto de usuario antes de llamar al método de actualización del DAO. Esto debería actualizar el objeto de usuario correcto en la base de datos.

    En cuanto a la implementación de DTO/Mapper, depende de los requisitos y complejidad de su aplicación. Si tiene objetos complejos con relaciones anidadas, puede ser útil utilizar DTOs para transferir datos entre el cliente y el servidor, y asignarlos a los objetos de entidad en el backend. Sin embargo, para aplicaciones simples como esta, podría ser excesivo. Siempre es una buena práctica separar las preocupaciones y mantener la capa de API limpia y simple.

Comments are closed.