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