restjparestful-url

how to update user with PUT spring boot and JPA


I have some restfull services and get and getall work correctly for me, but I can't update a user.

Here is my service class:

@Service
public class UsuarioService{
    @Autowired
    UsuarioRepository usuarioRepository;
    
    public ArrayList<Usuario> obtenerUsuarios(){
        return (ArrayList<Usuario>) usuarioRepository.findAll();
    }
    
    public Usuario guardarUsuario(Usuario usuario) {
        return usuarioRepository.save(usuario);
    }
    
    public Usuario modificarUsuario(Long id, Usuario usuario) {
        Optional<Usuario> user = usuarioRepository.findById(id);
        if(user.isPresent())
        {       
            usuarioRepository.save(usuario);
            return usuario;
        }
        return null;
    }

}

and here is my UserController class:

@RestController
@RequestMapping("/usuario")
public class UsuarioController {
    
    @Autowired
    UsuarioService usuarioService;
    
    @GetMapping()
    public ArrayList<Usuario> obtenerUsuarios(){
        return usuarioService.obtenerUsuarios();
    }
    
    @PostMapping
    public Usuario guardarUsuario(@RequestBody Usuario usuario) {
        return this.usuarioService.guardarUsuario(usuario);
    }
    
    @PutMapping("{id}")
    public Usuario modificarUsuario(@PathParam("id") Long id, @RequestBody Usuario usuario) {;
        return this.usuarioService.modificarUsuario(id, usuario);
    }
}

Why cant update user with postman? enter image description here


Solution

  • Your request payload should not be an array it should just be like below. Also change @PathParam("id") to @PathVariable("id")

    {
        "name" : ""
        "email" : ""
    }
    

    Looks like your modificarUsuario method is also not correct and should be something like

        public Usuario modificarUsuario(Long id, Usuario usuario) {
            Optional<Usuario> user = usuarioRepository.findById(id);
            if(user.isPresent())
            {   
                user.setName(usuario.getName())    
                user.setEmail(usuario.getEmail)
                return usuarioRepository.save(user);
            }
            return null;
        }