Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拉取请求不存在';t更新存储库_Java_Spring Boot_Validation_Request_Put - Fatal编程技术网

Java 拉取请求不存在';t更新存储库

Java 拉取请求不存在';t更新存储库,java,spring-boot,validation,request,put,Java,Spring Boot,Validation,Request,Put,我正试图通过发送以下带有以下代码的请求来更改PerfilRepository中的Perfil对象: package br.com.bandtec.projetocaputeam.controller; import br.com.bandtec.projetocaputeam.dominio.*; import br.com.bandtec.projetocaputeam.service.*; import org.springframework.beans.factory.annota

我正试图通过发送以下带有以下代码的请求来更改PerfilRepository中的Perfil对象:

   package br.com.bandtec.projetocaputeam.controller;

import br.com.bandtec.projetocaputeam.dominio.*;
import br.com.bandtec.projetocaputeam.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/caputeam")
public class CaputeamController {

//USER CLASS

    public abstract class Perfil {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "nome")
    @NotNull
    @Size(min = 5,max = 30)
    @Pattern(regexp = "^[a-zA-Z\s]*$", message = "Nome inválido! Digite apenas letras e espaçamento") //Permite apenas letras e espaço
    private String nome;

    @NotNull
    @CPF
    private String cpf;

    @Column(name = "email")
    @NotNull
    @Email
    private String email;

    @NotNull
    @Size(min = 5,max = 12)
    private String senha;

    private Integer telefone;

    @DecimalMin("0")
    @DecimalMax("5")
    private Double avaliacao;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id_endereco")
    private Endereco endereco;

    @NotNull
    private String tipoPerfil;

    @OneToOne(cascade = CascadeType.ALL)
    private Categoria categoriaAutonomo;

    //Getters
    public Integer getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public String getCpf() {
        return cpf;
    }

    public String getEmail() {
        return email;
    }

    public String getSenha() {
        return senha;
    }

    public Integer getTelefone() {
        return telefone;
    }

    public Double getAvaliacao() {
        return avaliacao;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public String getTipoPerfil() {
        return tipoPerfil;
    }

    public Categoria getCategoriaAutonomo() {
        return categoriaAutonomo;
    }

    //Setters
    public void setTipoPerfil(String tipoPerfil) {
        this.tipoPerfil = tipoPerfil;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public void setTelefone(Integer telefone) {
        this.telefone = telefone;
    }

    public void setAvaliacao(Double avaliacao) {
        this.avaliacao = avaliacao;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public void setCategoriaAutonomo(Categoria categoriaAutonomo) {
        this.categoriaAutonomo = categoriaAutonomo;
    }
}
//---存储库

   @Autowired
    private PerfilService perfilService = new PerfilService();
//--- USUARIOS
    @GetMapping("/usuarios")
    public ResponseEntity getUsuario(){
        return perfilService.getPerfisRepository();
    }

    @PostMapping("/cadastrar-usuario")
    public ResponseEntity cadastrarUsuario(@RequestBody @Valid Perfil novoPerfil){
        return perfilService.cadastrarUsuario(novoPerfil);
    }

    @PutMapping("/usuarios/{id}")
    public ResponseEntity alterarUsuario(@RequestBody @Valid Perfil usuarioAlterado, @PathVariable int id){
        return perfilService.alterarPerfil(usuarioAlterado,id);
    }
这就是我改变perfil对象的方法

    public ResponseEntity alterarPerfil(Perfil perfilAlterado, int id){

    perfisRepository.findById(id).map(perfil -> {
        perfil.setNome(perfilAlterado.getNome());
        perfil.setEmail(perfilAlterado.getEmail());
        perfil.setTelefone(perfilAlterado.getTelefone());
        return ResponseEntity.ok().build();
});
return ResponseEntity.badRequest().body("Alteração inválida!");
}

我用邮递员的方式发送我的put请求:

 {
    "id": 1,
    "nome": "Beatriz Barros",
    "cpf": "103.725.810-05",
    "email": "bia@hotmail.com",
    "senha": "121520",
    "telefone": 1134577777,
    "avaliacao": 4.9,
    "endereco": {
        "id": 1,
        "cep": "03311111",
        "bairro": "Vila Poeira",
        "logradouro": "RuaFlor",
        "numeroLogradouro": 7,
        "complemento": null,
        "uf": "sp",
        "cidade": "SaoPaulo"
    },
    "tipoPerfil": "autonomo",
    "categoriaAutonomo": {
        "id": 1,
        "nome": "Jardineiro",
        "descricao": null
    },
    "precoAutonomo": 0.0
}
但它总是返回状态400错误请求! 我已经尝试只发送我想更改的字段(姓名、电子邮件和电话),但也没有成功

我还试着发送有或没有ID的邮件,但没有任何工作


我怎样才能发送正确的请求呢?

嗯,实际上你就是这么做的

    perfisRepository.findById(id).map(perfil -> {
        perfil.setNome(perfilAlterado.getNome());
        perfil.setEmail(perfilAlterado.getEmail());
        perfil.setTelefone(perfilAlterado.getTelefone());
        return ResponseEntity.ok().build();
});
perfil->{/**/}
实际上是一个或换句话说:一个匿名方法。因此,您不是使用
alteraperfil
方法返回,而是使用匿名方法返回

我从未使用过Spring,但通过阅读,我认为
perfisRepository
正在实现
crudepository
接口

正确的代码应该类似于:

Perfil oldObject = perfisRepository.findById(id).get();

if(oldObject == null) return ResponseEntity.badRequest().body("Alteração inválida!");

oldObject.setNome(perfilAlterado.getNome());
oldObject.setEmail(perfilAlterado.getEmail());
/* and so on - you probably want to use reflection or a helping class to save you some time here */
// For a given entity, save will act as update too.
perfisRepository.save(oldObject);
return ResponseEntity.ok().build();

因为在代码中,您没有坚持任何更改。

这正是我的问题!非常感谢你,我想我最终创造了一个固定的想法,甚至没有注意到滑倒!