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

[Bug] Erro requisição post /medicos

Após criar o projeto fiz a primeira parte da MedicoController

@RestController
@RequestMapping("medicos")
public class MedicoController {

    @PostMapping
    public void cadastrar(String dadosMedico){
        System.out.println(dadosMedico);
    }
}

Startei a aplicação e fiz a chamada via Insomnia para a api ele retorna 404

Log do servidor

2023-07-21T23:03:29.069-03:00  INFO 36572 --- [  restartedMain] med.voll.api.ApiApplication              : Starting ApiApplication using Java 17 with PID 36572 (C:\Users\mesousa3\devel\api\target\classes started by mesousa3 in C:\Users\mesousa3\devel\api)
2023-07-21T23:03:29.069-03:00  INFO 36572 --- [  restartedMain] med.voll.api.ApiApplication              : No active profile set, falling back to 1 default profile: "default"
2023-07-21T23:03:29.161-03:00  INFO 36572 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-07-21T23:03:29.161-03:00  INFO 36572 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-07-21T23:03:29.161-03:00  INFO 36572 --- [  restartedMain] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.11]
2023-07-21T23:03:29.173-03:00  INFO 36572 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-07-21T23:03:29.174-03:00  INFO 36572 --- [  restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 104 ms
2023-07-21T23:03:29.206-03:00  INFO 36572 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2023-07-21T23:03:29.224-03:00  INFO 36572 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-07-21T23:03:29.226-03:00  INFO 36572 --- [  restartedMain] med.voll.api.ApiApplication              : Started ApiApplication in 0.176 seconds (process running for 762.96)
2023-07-21T23:03:29.227-03:00  INFO 36572 --- [  restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
2023-07-21T23:03:36.324-03:00  INFO 36572 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-07-21T23:03:36.325-03:00  INFO 36572 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-07-21T23:03:36.325-03:00  INFO 36572 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
2023-07-21T23:04:13.341-03:00  INFO 36572 --- [   File Watcher] rtingClassPathChangeChangedEventListener : Restarting due to 1 class path change (0 additions, 1 deletion, 0 modifications)
2023-07-21T23:04:13.370-03:00  INFO 36572 --- [      Thread-55] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-07-21T23:04:13.371-03:00  INFO 36572 --- [      Thread-55] o.a.c.c.C.[Tomcat].[localhost].[/]       : Destroying Spring FrameworkServlet 'dispatcherServlet'

Alguém tem alguma dica de configuração a ser realizada para a aplicação funcionar?

As configurações de restart automatico foram feitas no Intellig Insira aqui a descrição dessa imagem para ajudar na acessibilidade

6 respostas

Marcos, bom dia.

Olhando aqui seu codigo é encontrado algumas divergências ok?

O seu codigo teria que ficar esse jeito

@RestController
@RequestMapping("/medicos")
public class MedicoController {

    @PostMapping
    public void cadastrar(@RequestBody NomeDaClasseDoMedico dadosMedico){
        System.out.println(dadosMedico.toString());
    }
}

Quando você chama RequestMapping por mais que você tenha apenas um valor é necessário colocar uma barra antes. Outro ponto que para um Json consiga ser "enxergado" pelo Spring é necessário passar o @RequestBody.

Bom dia. Muito obrigado pela ajuda. Fiz os ajustes mais não funcionou.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAlém disso troquei a minha JDK para a versão 17.0.8 e tentei usar a versão 3.0.0-M5 do spring mais não funcionou.

Minha versão do spring 3.1.2

Se quiser testar o código esta salvo neste repositório https://github.com/estevamdf2/med.voll.git

Salvei as requisições do Insomnia em docs/insomnia Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Marcos,

Para esse caso, qual foi o erro que deu? Ou ele ocorreu tudo certo porem não retornou nada? Tenha em vista que como você deu um sysout ele vai aparecer na linha de comando Java.

Se deu erro, por gentileza nos disponibilize a imagem do erro.

Estranho ele não mostra erros no console e nem que a requisição chegou no servidor

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.2)

2023-07-22T12:32:04.969-03:00  INFO 18144 --- [  restartedMain] med.voll.api.ApiApplication              : Starting ApiApplication using Java 17.0.8 with PID 18144 (/home/estevam/devel/github/med.voll/target/classes started by estevam in /home/estevam/devel/github/med.voll)
2023-07-22T12:32:04.975-03:00  INFO 18144 --- [  restartedMain] med.voll.api.ApiApplication              : No active profile set, falling back to 1 default profile: "default"
2023-07-22T12:32:05.133-03:00  INFO 18144 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-07-22T12:32:05.134-03:00  INFO 18144 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2023-07-22T12:32:07.146-03:00  INFO 18144 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-07-22T12:32:07.169-03:00  INFO 18144 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-07-22T12:32:07.170-03:00  INFO 18144 --- [  restartedMain] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.11]
2023-07-22T12:32:07.269-03:00  INFO 18144 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-07-22T12:32:07.275-03:00  INFO 18144 --- [  restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2134 ms
2023-07-22T12:32:08.133-03:00  INFO 18144 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2023-07-22T12:32:08.212-03:00  INFO 18144 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-07-22T12:32:08.228-03:00  INFO 18144 --- [  restartedMain] med.voll.api.ApiApplication              : Started ApiApplication in 4.021 seconds (process running for 4.899)
2023-07-22T12:32:17.389-03:00  INFO 18144 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-07-22T12:32:17.390-03:00  INFO 18144 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-07-22T12:32:17.392-03:00  INFO 18144 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms
solução!

Oi!

Sua classe main está nesse pacote: med.voll.api e com isso o Spring somente carrega as classes que forem filhas desse pacote.

A classe main deveria estar no seu pacote med.voll para que ele consiga carregar as classes de todos os subpacotes:

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

Outra solução para este caso e colocar a annotation @ComponentScan que irá escanear as classes salvas em um determinado pacote e subpacotes.

With Spring, we use the @ComponentScan annotation along with the @Configuration annotation to specify the packages that we want to be scanned. @ComponentScan without arguments tells Spring to scan the current package and all of its sub-packages.

@SpringBootApplication
@ComponentScan(basePackages = "med.voll")
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }

}