1
resposta

Antigo curso de Spring boot

Estou fazendo uma tela para recebe dados baseado no antigo curso de springboot, mas um dado nao esta sendo recebidoInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

@Controller @RequestMapping("/estacionamento") public class EstacionamentoController { private List clientes= new ArrayList<>(); @GetMapping public String carregaPaginaFormulario() {

    return "estacionamento/cliente";
}

@PostMapping public String cadastraCliente(CadastroCliente dados, Model model) { var cliente = new Cliente(dados); clientes.add(cliente); // Adicione o cliente à lista de clientes

System.out.println(clientes); // Agora imprima a lista de clientes
model.addAttribute("lista", clientes);

return "estacionamento/listagem";

}

@GetMapping("/listagem") public String carregaPaginaListagem(Model model) { model.addAttribute( "lista", clientes);

return "estacionamento/listagem";

}

}

public class Cliente { public String nome; public String dataNascimento; public String cpf; public String email;

@Override public String toString() { return "Nome: " + nome + ", Email: " + email + ", CPF: " + cpf + ", Data de Nascimento: " + dataNascimento; }

public Cliente(CadastroCliente dados) { this.cpf=dados.cpf(); this.dataNascimento=dados.datanascimento(); this.email=dados.email(); this.nome=dados.nome();

}

}

1 resposta

Olá, Emanuel!

Pelo que entendi, você está tendo problemas para receber alguns dados em sua aplicação Spring Boot. Infelizmente, a descrição da sua dúvida não especifica qual dado não está sendo recebido, o que dificulta um pouco a identificação do problema.

No entanto, uma coisa que notei é que os atributos na sua classe Cliente são todos public. Em Java, é uma boa prática tornar os atributos de uma classe private e acessá-los por meio de métodos get e set. Isso é chamado de encapsulamento e ajuda a proteger seus dados.

Outra coisa que pode estar causando o problema é a falta de anotações na classe Cliente e na classe CadastroCliente. Para que o Spring possa vincular os dados do formulário aos atributos do objeto Cliente, você precisa usar a anotação @ModelAttribute no parâmetro do método cadastraCliente. Além disso, os campos na classe CadastroCliente devem ter os mesmos nomes que os campos no formulário.

Aqui está um exemplo de como seu código pode ficar:

@Controller 
@RequestMapping("/estacionamento") 
public class EstacionamentoController {
    private List<Cliente> clientes= new ArrayList<>();
    
    @GetMapping
    public String carregaPaginaFormulario() {
        return "estacionamento/cliente";
    }

    @PostMapping
    public String cadastraCliente(@ModelAttribute CadastroCliente dados, Model model) {
        var cliente = new Cliente(dados);
        clientes.add(cliente); 

        System.out.println(clientes); 
        model.addAttribute("lista", clientes);

        return "estacionamento/listagem";
    }

    @GetMapping("/listagem")
    public String carregaPaginaListagem(Model model) {
        model.addAttribute( "lista", clientes);

        return "estacionamento/listagem";
    }
}

public class Cliente {
    private String nome;
    private String dataNascimento;
    private String cpf;
    private String email;

    // getters e setters aqui

    @Override
    public String toString() {
        return "Nome: " + nome +
               ", Email: " + email +
               ", CPF: " + cpf +
               ", Data de Nascimento: " + dataNascimento;
    }

    public Cliente(CadastroCliente dados) {
        this.cpf=dados.getCpf();
        this.dataNascimento=dados.getDataNascimento();
        this.email=dados.getEmail();
        this.nome=dados.getNome();
    }
}

Espero que isso possa te ajudar a identificar o problema. Se você puder fornecer mais detalhes sobre qual dado não está sendo recebido, eu poderia te ajudar de forma mais específica.

Espero ter ajudado e bons estudos!