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

Erro Bad Request

Olá pessoal, estou estudando o curso Spring Boot 3: desenvolva uma API Rest em Java. E no meu trabalho estou (tentando) desenvolvendo uma aplicação para gerir um comércio de cafés. Criei a base de dados em MySql, criei as entities (de acordo com as tabelas), criei os dto's, os repositórios e criei de um controller. Aom tentar acessar a primeira url de cadastro começou a dar erro de Bad Request e não estou conseguindo corrigí-lo. Alguém pode me ajudar, por favor?

30 respostas

Descrição do erro no Insomnia: { "timestamp": "2023-03-03T11:52:07.777+00:00", "status": 400, "error": "Bad Request", "trace": "org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntity<com.minascafe.api.responses.Cafe_CocoResponse<com.minascafe.api.dtos.Cafe_CocoDto>> com.minascafe.api.controllers.CafeCocoController.cadastrar(com.minascafe.api.dtos.Cafe_CocoDto,org.springframework.validation.BindingResult) throws java.security.NoSuchAlgorithmException\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:166)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:136)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:181)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:148)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1080)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:731)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n\tat jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat }

Arquivo Controller:

package com.minascafe.api.controllers;

import java.security.NoSuchAlgorithmException;
import javax.naming.Binding;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.minascafe.api.dtos.Cafe_CocoDto;
import com.minascafe.api.entities.Cafe_Coco;
import com.minascafe.api.responses.Cafe_CocoResponse;
import com.minascafe.api.services.Cafe_Coco_Service;

import jakarta.validation.Valid;

@RestController //Endpoint (página web) de Controller
@RequestMapping("/cadastrar_cafecoco") //Define a url da classe - "mapeando a requisição"
//@CrossOrigin(origins = "*") //Permite que as requisições venham de lugares distintos
public class CafeCocoController {

    public static final Logger log = LoggerFactory.getLogger(CafeCocoController.class); //Log para adicionar entradas no console

    @Autowired
    private Cafe_Coco_Service cafe_Coco_Service;

    /**
     * Cadastra um lote de café em côco no sistema
     * 
     * @param cafe_cocoDto
     * @return ResponseEntity<Response<Cafe_CocoDto>>
     * @throws NoSuckAlgorithmException
     */    

    @PostMapping//Verbo Http de 'Cadastro'
    public ResponseEntity<Cafe_CocoResponse<Cafe_CocoDto>> cadastrar(@Valid @RequestBody Cafe_CocoDto cafe_cocoDto,//RequestBody pega os dados do request e converte em um Dto. @Valid chama a validação que eu criei no Dto.
            BindingResult result) throws NoSuchAlgorithmException{//Exceção da parte de geração de senhas - BindingResult - terá a informação do resultado da validação do Dto.
        System.out.println(cafe_cocoDto);
      log.info("Cadastrando um café em côco: {}", cafe_cocoDto.toString()); //passa os dados que chegaram via Post Request
      Cafe_CocoResponse<Cafe_CocoDto> response = new Cafe_CocoResponse<Cafe_CocoDto>(); //Criando uma instância de Cafe_CocoResponse que será utilizado para retornar os dados. 
      //validarDadosExistentes(cafe_cocoDto, result);
      Cafe_Coco cafe_coco = this.converterDtoParaCafeCoco(cafe_cocoDto);      

      if (result.hasErrors()) { //Se possui erros de validação
          log.error("Erro validando dados de cadastro de café em côco: {}", result.getAllErrors());
          result.getAllErrors().forEach(error -> response.getErrors().add(error.getDefaultMessage()));
          return ResponseEntity.badRequest().body(response);
      }

        this.cafe_Coco_Service.persistir(cafe_coco);
        return ResponseEntity.ok(response);        
    }

    private void validarDadosExistentes(Cafe_CocoDto cafe_CocoDto, BindingResult result) { //Verifica se esse café em côco já existe no banco de dados
        this.cafe_Coco_Service.buscarPorProdutor(cafe_CocoDto.getProdutor())
        .ifPresent(emp -> result.addError/*Adicionando um erro ao result */(new ObjectError("cafe_Coco", "Este café em Côco já existe!")));
    }

    private Cafe_Coco converterDtoParaCafeCoco(Cafe_CocoDto cafe_cocoDto) {
        Cafe_Coco cafe_coco = new Cafe_Coco();
        cafe_coco.setLote(cafe_cocoDto.getLote());
        cafe_coco.setData(cafe_cocoDto.getData());
        cafe_coco.setProdutor(cafe_cocoDto.getProdutor());
        cafe_coco.setQuilos(cafe_cocoDto.getQuilos());
        cafe_coco.setSacos(cafe_cocoDto.getSacos());

        return cafe_coco;
    }
}

Application.properties:

#logging.level.com.minascafe=DEBUG

#MySQL
#Não cria nenhuma entidade no banco, será feito manualmente
spring.jpa.hibernate.ddl-auto=none
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url= jdbc:mysql://localhost:3306/minas_cafe
spring.datasource.username=root
spring.datasource.password=359423

#exibe os comandos SQL

#Exibe as queries executadas pela aplicação Java 
spring.jpa.properties.hibernate.show-sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.type=trace
spring.jpa.show-sql=true

security.basic.enable=false

Oi Edson!

Pelo erro a requisição foi enviada sem o json no insmonia. Manda um print aqui de como como disparou a requisição.

Print do Insomnia: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O problema é no campo data, que está no formato inválido.

O formato correto é: yyyy-mm-dd. Por exemplo: 2022-12-30

Eu ja´ inseri das duas maneiras, mas com a data nesse formato americano exibe um erro diferente: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Manda aqui o seu DTO. A princípio você colocou o @NotEmpty no campo data, mas essa anotação é somente para Strings.

Isso mesmo Rodrigo, coloquei @NotEmpty no dto:

package com.minascafe.api.dtos;

import java.util.Date;
import org.hibernate.validator.constraints.Length;
import jakarta.validation.constraints.NotEmpty;

public class Cafe_CocoDto {

    private int lote;    
    private String produtor;
    private Date data;
    private int sacos;
    private double quilos;

    public Cafe_CocoDto() {        
    }

    public int getLote() {
        return lote;
    }
    public void setLote(int lote) {
        this.lote = lote;
    }

    @NotEmpty(message = "O nome não pode ser vazio.") // Regra de validação - O nome do produtor não pode ser vazio 
    @Length(min = 3, max = 50, message = "O nome do produtor deve conter entre 3 e 40 caracteres.")        
    public String getProdutor() {
        return produtor;
    }
    public void setProdutor(String produtor) {
        this.produtor = produtor;
    }

    @NotEmpty(message = "A data não pode ser vazia.")
    public Date getData() {
        return data;
    }
    public void setData(Date data) {
        this.data = data;
    }
    public int getSacos() {
        return sacos;
    }
    public void setSacos(int sacos) {
        this.sacos = sacos;
    }
    public double getQuilos() {
        return quilos;
    }
    public void setQuilos(double quilos) {
        this.quilos = quilos;
    }    

    @Override
    public String toString() {
        return "Cafe_Coco [lote=" + lote + ", produtor=" + produtor + ", data=" + data
                + ", sacos=" + sacos + ", quilos=" + quilos + ", subproduto=" + "]";
    }    
}
 @NotEmpty(message = "A data não pode ser vazia.")
public Date getData() {
    return data;
}

@NotEmpty é só para String. Troque para @NotNull

Essa questão foi resolvida. Mas agora está gerando outro erro (no Insomnia): { "timestamp": "2023-03-03T17:52:32.069+00:00", "status": 500, "error": "Internal Server Error", "trace": "org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [select c1_0.lote,c1_0.barracao,c1_0.catacao,c1_0.classificacao,c1_0.data,c1_0.lancado,c1_0.meieiro,c1_0.numero_nota,c1_0.observacoes,c1_0.peneira,c1_0.porcentagem_meieiro,c1_0.porcentagem_produtor,c1_0.produtor,c1_0.quilos,c1_0.referencia,c1_0.sacos,c1_0.status,c1_0.subproduto from cad_cafe_coco c1_0 where c1_0.lote=?]\r\n\tat

...

org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554)\r\n\tat org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)\r\n\tat org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:92)\r\n\tat org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)\r\n\tat com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:327)\r\n\tat com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java)\r\n\tat org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:90)\r\n\tat org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176)\r\n\t... 134 more\r\n", "message": "could not prepare statement; SQL [select c1_0.lote,c1_0.barracao,c1_0.catacao,c1_0.classificacao,c1_0.data,c1_0.lancado,c1_0.meieiro,c1_0.numero_nota,c1_0.observacoes,c1_0.peneira,c1_0.porcentagem_meieiro,c1_0.porcentagem_produtor,c1_0.produtor,c1_0.quilos,c1_0.referencia,c1_0.sacos,c1_0.status,c1_0.subproduto from cad_cafe_coco c1_0 where c1_0.lote=?]", "path": "/cadastrar_cafecoco" }

E no console está gerando o seguinte erro:

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

Deu erro de Table not found. Deve estar sem a migration que cria a tabela.

Ele está dizendo que a tabela 'cad_cafe_coco' não foi encontrada no 'H2', mas eu estou utilizando o MySql. H2 somente no application.properties de teste. Sinceramente, não estou entendendo. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A migration existe Rodrigo:

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

O projeto deve estar rodando com o profile de testes então. Para o projeto, roda novamente e olha no início do log no console que aparece qual o profile ativo.

Defini o profile para "Dev", mas mesmo assim continua apresentando erro: application.properties:

#logging.level.com.minascafe=DEBUG

spring.profiles.active=dev
#MySQL
#Não cria nenhuma entidade no banco, será feito manualmente
spring.jpa.hibernate.ddl-auto=none
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url= jdbc:mysql://localhost:3306/minas_cafe
spring.datasource.username=root
spring.datasource.password=359423

#exibe os comandos SQL

#Exibe as queries executadas pela aplicação Java 
spring.jpa.properties.hibernate.show-sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.type=trace
spring.jpa.show-sql=true

spring.security.enable=false

application-dev.properties:

#MySQL
#Não cria nenhuma entidade no banco, será feito manualmente
spring.jpa.hibernate.ddl-auto=none
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url= jdbc:mysql://localhost:3306/minas_cafe
spring.datasource.username=root
spring.datasource.password=359423

#exibe os comandos SQL

#Exibe as queries executadas pela aplicação Java 
spring.jpa.properties.hibernate.show-sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.type=trace
spring.jpa.show-sql=true

spring.security.enable=false

O console apresenta o seguinte erro:

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

O que eu faço Rodrigo? :(

Manda o início do log na aba console. Na imagem ficou cortado.

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

Oi Edson!

Manda o log do console completo. Em texto mesmo e não print

2023-03-08T09:05:17.906-03:00 INFO 700---[restartedMain] com.minascafe.api.MinasCafeApplication : Starting MinasCafeApplication using Java 17.0.6 with PID 700 (C:\Users\Edson\OneDrive\Documentos\workspace-spring-tool-suite-4-4.17.2.RELEASE\MinasCafe\target\classes started by Edson in C:\Users\Edson\OneDrive\Documentos\workspace-spring-tool-suite-4-4.17.2.RELEASE\MinasCafe)
2023-03-08T09:05:17.922-03:00 INFO 700---[restartedMain] com.minascafe.api.MinasCafeApplication : No active profile set, falling back to 1 default profile: "default"
2023-03-08T09:05:18.061-03:00 INFO 700---[restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-03-08T09:05:18.062-03:00 INFO 700---[restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2023-03-08T09:05:19.238-03:00 INFO 700---[restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2023-03-08T09:05:19.381-03:00 INFO 700---[restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 124 ms. Found 5 JPA repository interfaces.
2023-03-08T09:05:20.393-03:00 INFO 700---[restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-03-08T09:05:20.414-03:00 INFO 700---[restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-03-08T09:05:20.414-03:00 INFO 700---[restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.5]
2023-03-08T09:05:20.535-03:00 INFO 700---[restartedMain] o.a.c.c.C. [Tomcat].[localhost].[/]    : Initializing Spring embedded WebApplicationContext
2023-03-08T09:05:20.536-03:00 INFO 700---[restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2472 ms
2023-03-08T09:05:20.586-03:00 INFO 700---[restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2023-03-08T09:05:20.921-03:00 INFO 700---[restartedMain] com.zaxxer.hikari.pool.HikariPool     : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:7d5f1751-6272-4916-8b67-67f1848bd46c user=SA
2023-03-08T09:05:20.924-03:00 INFO 700---[restartedMain] com.zaxxer.hikari.HikariDataSource     HikariPool-1 - Start completed.
2023-03-08T09:05:20.942-03:00 INFO 700---[restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:7d5f1751-6272-4916-8b67-67f1848bd46c'
2023-03-08T09:05:21.166-03:00 INFO 700---[restartedMain] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 9.5.1 by Redgate
2023-03-08T09:05:21.166-03:00 INFO 700---[restartedMain] o.f.c.internal.license.VersionPrinter : See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#9.5.1
2023-03-08T09:05:21.166-03:00 INFO 700---[restartedMain] o.f.c.internal.license.VersionPrinter   :
2023-03-08T09:05:21.191-03:00 INFO 700---[restartedMain] o.f.c.i.database.base.BaseDatabaseType : Database: jdbc:h2:mem:7d5f1751-6272-4916-8b67-67f1848bd46c (H2 2.1)
2023-03-08T09:05:21.327-03:00 INFO 700---[restartedMain] o.f.core.internal.command.DbValidate :  Successfully validated 1 migration (execution time 00:00.029s)
2023-03-08T09:05:21.339-03:00 INFO 700---[restartedMain] o.f.c.i.s.JdbcTableSchemaHistory   : Creating Schema History table "PUBLIC"."flyway_schema_history" ...
2023-03-08T09:05:21.436-03:00 INFO 700---[restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "PUBLIC": << Empty Schema >>
2023-03-08T09:05:21.471-03:00 INFO 700---[restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "PUBLIC" to version "01 - create tables"
2023-03-08T09:05:21.482-03:00 ERROR 700---[restartedMain] o.f.core.internal.command.DbMigrate : Migration of schema "PUBLIC" to version "01 - create tables" failed! Please restore backups and roll back database and code!
2023-03-08T09:05:21.492-03:00 700---[restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Migration V01__create_tables.sql failed
---------------------------------------
SQL State  : 42001
Error Code : 42001

Você consegue compartilhar o seu projeto? Só analisando o codigo completo para entender o problema

.....

Compartilhar pelo github Rodrigo?

Aqui o projeto funcionou ok.

Você precisa remover essa propriedade dos seus arquivos properties:

spring.profiles.active=dev

E precisa alterar suas classes de testes automatizados para utilizar as anotações do JUnit 5 e não do JUnit 4

Rodrigo, devo remover essa propriedade (spring.profiles.active=dev) de todos meus arquivos properties?

As anotações que devo alterar seriam @Before por @BeforeEach e @After por @AfterEach, por exemplo?

Curioso que aqui pra mim continua apresentando erro.

solução!

Isso, remove ou comenta essa propriedade de todos os properties.

As anotações de testes são essas mesmo e também trocar de @RunWith para @ExtendWith(SpringExtension.class)

Funcionou certinho aqui Rodrigo. Obrigado por seu auxílio e paciência!

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