Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Bean Validation corrompe o projeto

Apos ter adicionado a dependency do validation, o projejto simplesmente nao funciona mais, e fica dando o seguinte erro:

Error: Could not find or load main class br.com.alura.spring.mvc.SpringMvcApplication
Caused by: java.lang.ClassNotFoundException: br.com.alura.spring.mvc.SpringMvcApplication

Fiz diferentes testes, baixei todas as versoes do spring.start.io com e sem o validarion adicionado.

Quando adiciono o validation e faço o download e vou executar o projeto virgem, ja de cara aparece o mesmo erro. Se eu baixo sem o validation adicionado e executo o projeto virgem funciona normalmente.

Ja testei tambem, com o projeto baixado sem o validiation, testo, funciona perfeitamente, e em seguida adiciono pela pom.xml, o projeto começa a apresentar o mesmo erro

Eu nao sei mais oque fazer, to nesse problema a 3 dias, testei com todas as versoes de spring disponiveis no site, tentei pesquisar em forum, e nada falando sobre.

Alguem sabe me dizer oque possa ser feito? Se nao vou ter que continuar o curso sem fazer a validação necessaria, ou terei que implementar ela com infinitos if's de validacão....

3 respostas

Meu codigo no git ate o momento, https://github.com/parisivitor/Alura-SpringMvc

todas as dependencias que eu adiciono de spring validadtion dao problema, testei com com diversas versoes, e sem declara a versao, e os erros persistem, nao fica disponivel as anotações e para de funcionar o servidor ou nem executa mais o projeto:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.5.1</version>
</dependency>

A unica validation que consegui adicionar foi:

<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

que foi a unica que me possibilitou utilizar a tag @NotBlank, porem ao tenta realizar a sua funcionalidade, o result.hasErrors() sempre retorna false.

Não achei solução para o problema, entao improveisei e estou rodando o spring na versão 2.2.2, auterando no pom.xml deixa assim:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

E apos fazer isso, acontecera erro de time local host, e para corrigir esse erro, deixar o seu application.properties desse jeito:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/mudi?useTimezone=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
solução!

Baixei o seu projeto e substitui a dependency que você está utilizando por:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

Depois de adicionar os atributos do trymeleaf no html e adicionar o parametro "RequisicaoNovoPedido requisicao" na requisição GET. Funcionou normalmente.

Arquivos Alterados:

PedidoController.java

    @GetMapping("formulario")
    public String formulario(RequisicaoNovoPedido requisicao) {
        return "pedido/formulario";
    }

formulario.html

<html>
    <head>
        <meta charset = "UTF-8"/>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">

            <div class="container-fluid bg-secondary text-light p-5 mb-0">
                <h1 class="display-4">Novo Pedido</h1>
            </div>
            <div class="card mt-3">
                <form  class="card-body" action="/pedido/novo" method="POST" th:object="${requisicaoNovoPedido}">
                    <div class="form-group">
                        <label for="nomeProduto">Produto</label>
                        <input class="form-control" th:field="*{nomeProduto}" placeholder="nome do produto"/>
                        <small>Informe qual o nome do produto.</small>
                    </div>
                    <div class="form-group">
                        <label for="urlProduto">Url</label>
                        <input class="form-control" th:field="*{urlProduto}" placeholder="url do produto"/>
                        <small>Procuro em um site o produto que voce deseja, e nos informe a respectiva url aqui.</small>
                    </div>
                    <div class="form-group">
                        <label for="urlImagem">Imagem</label>
                        <input class="form-control" th:field="*{urlImagem}" placeholder="url da imagem do produto"/>
                        <small>Copie a url de uma boa imagem do produto e cole aqui para ajudar a conseguir compradores.</small>
                    </div>
                    <div class="form-group">
                        <label for="descricao">Descricao</label>
                        <textarea class="form-control" th:field="*{descricao}" placeholder="Adicione detalhes importantes para ajudar o comprador"></textarea>
                    </div>
                    <button class="btn btn-primary mt-3" type="submit">Cadastrar</button>

                </form>
            </div>
        </div>
    </body>
</html>

pom.xml

        <!-- <dependency> Bloco antigo comentado
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

Minha verção do eclipse: Eclipse IDE for Enterprise Java and Web Developers Version: 2021-03 (4.19.0) Build id: 20210312-0638

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software