如何使用PUT Sping Boot 和JPA更新用户

0tdrvxhp  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(126)

我有一些restfull服务,可以正确获取和获取,但无法更新用户。
下面是我的服务类:

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

}

下面是我的UserController类:

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

为什么不能用postman更新用户?

e4yzc0pl

e4yzc0pl1#

您的请求负载不应该是数组,它应该如下所示。还要将@PathParam(“id”)更改为@PathVariable(“id”)

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

看起来您的modificarUsuario方法也不正确,应该类似于

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

相关问题