Home > Net >  how to update user with PUT spring boot and JPA
how to update user with PUT spring boot and JPA

Time:09-28

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

CodePudding user response:

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;
    }
  • Related