Excelente. Para complementar, acho que poderiam fazer um video explicando como usar o WebClient com uma API que espera autenticação, ou será que já existe?
Sim! Vamos comparar os 2 recursos RESTtemplate x WebClient!!! Grande @William, muito obrigado, belo video. #SpringWebClient me parece que ficou bem bom.
Muito show a explicação, só senti falta do get com bodyToFlux, que é usado quando o retorno é uma lista de objetos, nesse caso, o block é meio diferente né, ainda não entendi como usar o o blockFirst ou blockLast...
Gostaria de sugerir a publicação de um vídeo sobre o consumo de web services SOAP usando o Spring Boot. Após uma pesquisa no RUclips, não encontrei vídeos nacionais de qualidade que pudessem orientar bem sobre o consumo de web services SOAP usando o Spring Boot. Por isso, acho que seria interessante a Algaworks publicar um vídeo sobre este tema. Entendo que o foco hoje em dia é o consumo e produção de serviços que utilizam a arquitetura REST. No entanto, ainda existem muitos sistemas legados que expõem web services SOAP. Seria interessante para os dois lados. Os alunos que iriam expandir os conhecimentos sobre o assunto e a Algaworks que seria o único canal a publicar um vídeo de qualidade sobre o tema em questão. Sou aluno de vocês em vários cursos, como o Especialista Spring Rest, Spring Framework Expert e Especialista JPA. Gosto muito dos vídeos produzidos pela Algaworks, porque vocês realmente possuem didática e produzem conteúdo com qualidade. Muito obrigado.
Parabéns pelo conteúdo do vídeo. Confesso que pensei que ia funcionar a requisição em paralelo quando colocou a chamada aos dois métodos block juntas e ao final do método. Se tivesse funcionado, para mim estaria fazendo sentido. Estranhei a sintaxy com o zip.
Excelente aula, sua didatica e muito boa, as aulas de docker sao tops. voce poderida fazer uma sequencia de aulas falando sobre microservice parabens pelo sucesso
Excelente aula. Como mencionaste no inicio do vídeo, seria interessante um vídeo abordando as diferenças entre Spring mvc e Spring boot. Com sua didática isso ficaria brilhante. Abraço, fique bem.
Ótimo vídeo, valeu mesmo. Estava testando uma uri e deu erro de redirecionamento, código 301, como tratar isso? No postman essa mesma uri funciona normalmente.
Parabéns pela video aula show! Estava pesando nessa demonstração consumindo a api externa igual foi feito no exemplo mas salvar no banco de dados como ficaria?
Excelente Conteudo , muito bem explicado. tentei fazer um teste para receber uma lista e não conseguir ate o momento deste comentario, como seria no caso, para ter um retorno de uma Lista de Objetos no Mono ? Obrigado.
Olá! parabéns!!! Achei o vídeo super excelente! Porém gostaria de ter visto as demais operações também sendo implementadas. Fica como sugestão para um próximo exemplo, a implementação das demais operações e uma discussão referente a esta arquitetura de Webclient em relação a arquitetura tradicional de implementação de Microsserviços.
Olá Anderson! Valeu mesmo! Quando você se refere as demais operações, está falando dos verbos HTTP? Por exemplo, POST, PUT, DELETE, etc.? Já está anotado como sugestão, muito obrigado!
Olá Rubens! Muito obrigado! No cenário síncrono, onde a chamada é bloqueante, você poderia simplesmente utilizar um try/catch, já em um modo assíncrono, tem outras formas de se fazer esse tratamento. Estou pensando em fazer um vídeo sobre isso, o que você acha?
Parabéns, muito bom, agora estou com uma duvida, caso eu em um método post, eu não queira obter o response, somente enviar a requisição, teria como eu verificar caso ocorresse algum error ?
Olá mergulhador! Caso o seu código for sincrono como mostrado na aula, você pode utilizar o "onStatus" após o retrieve() e lançar uma Exception. .onStatus(httpStatus -> httpStatus.value() == 500, error -> Mono.error(new RuntimeException("error")))
Olá ótimo video, tentei implementar mas com uma API que não é bloqueante e retorna o erro "block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-epoll-3" para estes casos o que poderia fazer para recuperar o objeto?
Muito bom o conteúdo, só fiquei com uma dúvida... Vi que só está sendo retornado um objeto pela classe Mono, mas e se eu quiser retornar uma lista por exemplo?
O Mono pode conter uma lista dentro dele, mas caso queria utilizar tudo reativo, você pode utilizar o Flux. Acontece que o Flux só será útil caso a API que você consome também for reativa.
Achei bem interessante o assunto, parabéns pelo conteúdo!! Espero que tenham mais com assunto relacionado. Uma pergunta, caso eu quisesse exibir o resultado não apenas em JSON, mas também em um outro formato como XML ou CSV, como ficaria o header, eu simplesmente adicionar um outro header ou teria que criar um outro @bean?
Em relação às portas, é um tanto quanto incômodo criar vários Beans que só mudam a porta. Ao meu ver, uma solução melhor seria criar um gateway como o Zuul do Sprinig Cloud para rotear de forma automática. Aliás, parabéns pelo vídeo, agregou muito conhecimento!
Ao utilizar o .block() obtenho o seguinte erro: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3 Alguma ideia?
Esse metodo ainda e viavel nos dias de hj? quero aplicar em projetos e queria saber para aplicar em um projeto empresarial, e queria saber se e viavel.
Olá mergulhador! O Webclient ainda é atual e está sendo atualizado até os dias de hoje. O client http do Spring que não está mais recebendo atualizações é o RestTemplate.
Olá Lucas, não é necessário configurar o Bean do WebClient na classe Main. Você pode criar uma classe como WebClientConfig, anotá-la com @Configuration e colocar o Bean lá.
Willian , sou dev java e tenho conhecimento em Java server faces (jsf) porém vejo muitos falarem de spring mvc, o q o mercado hj em dia mais pede dentro os 2? Jsf já tá depreciado? Há muita diferença?
Olá Kobane! O Spring vem realmente obtendo uma grande notoriedade, porém o JSF ainda está sendo usado e ainda faz parte da especificação Jakarta EE. É possível que mais cedo ou mais tarde ele será depreciado, mas como ainda há empresas que pedem essa skill no mercado, não é algo que você precise ou deva deixar de lado. A melhor opção nesse caso que vejo, é ampliar o seu leque de opções, então saber JSF e saber Spring MVC só tem a agregar em seu currículo.
Olá Gustavo! No caso da chamada síncrona, ou seja, no modo bloqueante, ai sim, um try/catch resolveria o problema, já no modo assíncrono teríamos algumas formas de tratar esses erros. Estou pensando em gravar um vídeo a respeito, o que você acha?
Olá Gisiona! Sim, a implementação do WebClient é muito mais rica e completa que a do RestTemplate. Até por isso a própria documentação do Spring recomenda o uso do mesmo. O RestTemplate está em "modo de manutenção", ou seja, ele continua sendo levado para versões mais recentes do Spring, mas apenas com pequenas alterações e correções de bugs, logo o mesmo será depreciado.
Vídeo excelente! Isso pode ser uma ideia de micro serviço?, mas por favor amigos me nome de Jesus, façam um vídeo consumindo uma api no nível de maturidade 3 pelo Front Angular.
Olá Vinicius! Com certeza, você vai utilizar bastante esse recurso em uma arquitetura de microsserviços. Esse exemplo mesmo já é uma ideia bem simples dentro desse conceito. Com relação a sua sugestão de vídeo, pode ter certeza que vou providenciar, já está anotado aqui!
Pra quem está com erro no block(), use a versão 11 pra cima do java, apanhei um fds pq estava na versão 8, ainda bem que li o comentário do @Emanuel Paiva Medeiros
Excelente. Para complementar, acho que poderiam fazer um video explicando como usar o WebClient com uma API que espera autenticação, ou será que já existe?
Parabéns! Muito bem explicado.
o william me salvando mesmo depois de eu sair do projeto kkkkkkk valeu mano é noiss
Bom D+ só queria saber como consumir uma API externa e o vídeo faz isso e ainda ensina muito mais.
Cara tu é fera demais!! Valeu
Parabéns, esses vídeos estão muito bons 🎉 sugestão, falem sobre Flux!
Opa, obrigado de verdade Estevão! Pode deixar, que já está anotado sua sugestão!
Merece no 1000 professor!!!
Sim! Vamos comparar os 2 recursos RESTtemplate x WebClient!!!
Grande @William, muito obrigado, belo video. #SpringWebClient me parece que ficou bem bom.
Valeu, William! Conteúdo nota 1.000! Parabéns e muito obrigado!
Cabeludo você deu show de aula rapaz. Parabéns!
Parabens, excelente vídeo, você tem algum vídeo sobre padrão Saga para micro services ?
aula fantástica. poderia ter um vídeo desses falando sobre o spring reativo Mono e Flux sendo utilizados nos controllers e services
Muito obrigado pelo vídeo!! Super esclarecedor e bem explicado.
Mais um vídeo top, parabéns!!! , eu gostaria de ver geração de arquivo csv
Muito show a explicação, só senti falta do get com bodyToFlux, que é usado quando o retorno é uma lista de objetos, nesse caso, o block é meio diferente né, ainda não entendi como usar o o blockFirst ou blockLast...
Parabéns, ótimo vídeo! Gostaria muito de ver um vídeo sobre consumo de web service SOAP.
Gostaria de sugerir a publicação de um vídeo sobre o consumo de web services SOAP usando o Spring Boot. Após uma pesquisa no RUclips, não encontrei vídeos nacionais de qualidade que pudessem orientar bem sobre o consumo de web services SOAP usando o Spring Boot. Por isso, acho que seria interessante a Algaworks publicar um vídeo sobre este tema. Entendo que o foco hoje em dia é o consumo e produção de serviços que utilizam a arquitetura REST. No entanto, ainda existem muitos sistemas legados que expõem web services SOAP. Seria interessante para os dois lados. Os alunos que iriam expandir os conhecimentos sobre o assunto e a Algaworks que seria o único canal a publicar um vídeo de qualidade sobre o tema em questão.
Sou aluno de vocês em vários cursos, como o Especialista Spring Rest, Spring Framework Expert e Especialista JPA. Gosto muito dos vídeos produzidos pela Algaworks, porque vocês realmente possuem didática e produzem conteúdo com qualidade. Muito obrigado.
soap num é meio muito ruim?
Vídeo 100%. Ajudou de mais.
O conteúdo da Algaworks é muito bom! Parabéns pelo trabalho!
excelente conteúdo!!!
Ótimo conteúdo com didática excelente! Por mais vídeos assim. Obrigado!!
Poxa, muito obrigado Wallace! Fico feliz que tenha gostado.
Vamos sempre nos esforçar para entregar bons conteúdos pra vocês :D
Parabéns pelo conteúdo do vídeo.
Confesso que pensei que ia funcionar a requisição em paralelo quando colocou a chamada aos dois métodos block juntas e ao final do método.
Se tivesse funcionado, para mim estaria fazendo sentido.
Estranhei a sintaxy com o zip.
Show Willian exatamente o que estava procurando.
Aula top. Muito obrigado por compartilhar seu conhecimento.
Top demais. Muito bom, obrigado pelo vídeo!
Faz de como se comunicar em cima do protocolo https...por favor.
Nota 10. Show de aula
Caraba muito bom... FAÇA O VIDEO DAS DIFERENÇAS SIM... ajudaria muito
Opa, que bom que gostou Jefferson!
Beleza, vou fazer esse vídeo!
Eu consigo usar esse mesma ideia para consumir uma api SOAP? Se puder fazer um video consumindo uma api SOAP com springboot seria bacana.
Valeu Willian!! obrigado por compartilhar o conhecimento. Muito bom o vídeo. Parabéns!!
Poxa, muito obrigado mesmo Antonio! :D
opa... tudo contéudo muito bom... seria possivel tratar sobre a programação reativa e o projeto reactor?
Olá mergulhador!
Já está na nossa lista de estudos, continue nos sugerindo novos assuntos!
Um vídeo mostrando as diferenças seria sensacional
Pode deixar que vou providenciar, já está anotado!
Conteúdo muito valioso
Poxa, muito obrigado Domingos. Ficamos muito felizes em saber que tenha gostado. :D
Aula top! muito obrigado
Excelente conteúdo e ótima didática. Parabéns!
Muito bom !!!
Excelente aula, sua didatica e muito boa, as aulas de docker sao tops.
voce poderida fazer uma sequencia de aulas falando sobre microservice
parabens pelo sucesso
Uma dúvida, eu conseguiria ter diferentes retornos de objetos, com status code diferentes?
Opa blz! como eu faria para retornar uma lista de produtos ?
o Mono traz um produto e para trazer uma Lista ?
Excelente aula. Como mencionaste no inicio do vídeo, seria interessante um vídeo abordando as diferenças entre Spring mvc e Spring boot. Com sua didática isso ficaria brilhante. Abraço, fique bem.
Olá Vilson!
Poxa, que massa, fico muito feliz que tenha gostado. Pode deixar então que vou preparar esse vídeo sobre as diferenças!
Ótimo vídeo, valeu mesmo.
Estava testando uma uri e deu erro de redirecionamento, código 301, como tratar isso? No postman essa mesma uri funciona normalmente.
Parabéns pela video aula show! Estava pesando nessa demonstração consumindo a api externa igual foi feito no exemplo mas salvar no banco de dados como ficaria?
Ótimo vídeo, me ajudou muito, poderia me dar uma dica? como funciona os relacionamentos ManyToOne e OneToMany com o webclient? Valeu!
Excelente Conteudo , muito bem explicado. tentei fazer um teste para receber uma lista e não conseguir ate o momento deste comentario, como seria no caso, para ter um retorno de uma Lista de Objetos no Mono ? Obrigado.
Que video sensacional! Ótima explicação. Estou precisando implementar algo parecido no meu trabalho e foi de extrema ajuda
Olá! parabéns!!! Achei o vídeo super excelente! Porém gostaria de ter visto as demais operações também sendo implementadas. Fica como sugestão para um próximo exemplo, a implementação das demais operações e uma discussão referente a esta arquitetura de Webclient em relação a arquitetura tradicional de implementação de Microsserviços.
Olá Anderson! Valeu mesmo!
Quando você se refere as demais operações, está falando dos verbos HTTP? Por exemplo, POST, PUT, DELETE, etc.?
Já está anotado como sugestão, muito obrigado!
@@algaworks Opa. Obrigado, me refiro aos demais verbos HTTP sim. Parabéns!!! Att
Muito bom o video, gostaria de saber, no cenario onde um dos end-points falha, como o Mono faz o tratamento, ou e apenas lancada uma exception.
Olá Rubens! Muito obrigado!
No cenário síncrono, onde a chamada é bloqueante, você poderia simplesmente utilizar um try/catch, já em um modo assíncrono, tem outras formas de se fazer esse tratamento.
Estou pensando em fazer um vídeo sobre isso, o que você acha?
@@algaworks Adoraria ver esse video =)
@@algaworks Seria muito bom =D
@@algaworks Esse vídeo seria muito legal em?!
Problemas com block()? Deixa o seu pom.xml compatível com a do repositório do projeto 'consume'
E se não for um projeto "spring boot"? E se for um projeto com spring 3... por exemplo ?
Parabéns, muito bom, agora estou com uma duvida, caso eu em um método post, eu não queira obter o response, somente enviar a requisição, teria como eu verificar caso ocorresse algum error ?
Olá mergulhador!
Caso o seu código for sincrono como mostrado na aula, você pode utilizar o "onStatus" após o retrieve() e lançar uma Exception.
.onStatus(httpStatus -> httpStatus.value() == 500, error -> Mono.error(new RuntimeException("error")))
muito bom!
Usei webclient para uma aplicação com 600TPS, e usando o block a aplicação está travando =( você tem alguma dica ?
E-X-C-E-L-E-N-T-E-!!!
Olá ótimo video, tentei implementar mas com uma API que não é bloqueante e retorna o erro "block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-epoll-3"
para estes casos o que poderia fazer para recuperar o objeto?
Muito bom o conteúdo, só fiquei com uma dúvida... Vi que só está sendo retornado um objeto pela classe Mono, mas e se eu quiser retornar uma lista por exemplo?
O Mono pode conter uma lista dentro dele, mas caso queria utilizar tudo reativo, você pode utilizar o Flux. Acontece que o Flux só será útil caso a API que você consome também for reativa.
Muito bom, obrigado!!!!
Achei bem interessante o assunto, parabéns pelo conteúdo!! Espero que tenham mais com assunto relacionado.
Uma pergunta, caso eu quisesse exibir o resultado não apenas em JSON, mas também em um outro formato como XML ou CSV, como ficaria o header, eu simplesmente adicionar um outro header ou teria que criar um outro @bean?
Em relação às portas, é um tanto quanto incômodo criar vários Beans que só mudam a porta. Ao meu ver, uma solução melhor seria criar um gateway como o Zuul do Sprinig Cloud para rotear de forma automática. Aliás, parabéns pelo vídeo, agregou muito conhecimento!
Como seria a implementação caso o retorno fosse uma lista de produtos?
Ao utilizar o .block() obtenho o seguinte erro: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3
Alguma ideia?
Olá Anibal! Como ficou sua implementação?
@@algaworks public DadosIbge getDadosIbge(Long numero) {
Mono monoDadosIbge = this.webClient.method(HttpMethod.GET)
.uri("/{numero}", numero)
.retrieve().bodyToMono(DadosIbge.class);
DadosIbge dadosIbge = monoDadosIbge.block();
return dadosIbge;
}
Paz! Qui tal. Esse conteudo esta actualizado para 2022?
Olá Estevao, você teve alguma dificuldade específica?
Show de bola
Valeu mesmo, Marcos!
Esse metodo ainda e viavel nos dias de hj? quero aplicar em projetos e queria saber para aplicar em um projeto empresarial, e queria saber se e viavel.
Olá mergulhador! O Webclient ainda é atual e está sendo atualizado até os dias de hoje. O client http do Spring que não está mais recebendo atualizações é o RestTemplate.
@@algaworks Haaaa duvida, em meus teste que vi em outros videos usam o build inves do create, qual a diferença?
Alguem sabe se esse metodo é usado recentemente ? Qual seria o metodo mais conveniente ? E é realmente necessario mexer no main aplication ?
Olá Lucas, não é necessário configurar o Bean do WebClient na classe Main. Você pode criar uma classe como WebClientConfig, anotá-la com @Configuration e colocar o Bean lá.
Willian , sou dev java e tenho conhecimento em Java server faces (jsf) porém vejo muitos falarem de spring mvc, o q o mercado hj em dia mais pede dentro os 2? Jsf já tá depreciado? Há muita diferença?
Olá Kobane!
O Spring vem realmente obtendo uma grande notoriedade, porém o JSF ainda está sendo usado e ainda faz parte da especificação Jakarta EE.
É possível que mais cedo ou mais tarde ele será depreciado, mas como ainda há empresas que pedem essa skill no mercado, não é algo que você precise ou deva deixar de lado. A melhor opção nesse caso que vejo, é ampliar o seu leque de opções, então saber JSF e saber Spring MVC só tem a agregar em seu currículo.
Se der erro trata com o try catch?
Olá Gustavo!
No caso da chamada síncrona, ou seja, no modo bloqueante, ai sim, um try/catch resolveria o problema, já no modo assíncrono teríamos algumas formas de tratar esses erros.
Estou pensando em gravar um vídeo a respeito, o que você acha?
@@algaworks Acho top. Principalmente por conta da opção assíncrona.
@@algaworks Com certeza um vídeo com essa abordagem é bem-vindo :)
O uso de WebClient é melhor que a implementação do RestTemplate ?
Olá Gisiona!
Sim, a implementação do WebClient é muito mais rica e completa que a do RestTemplate. Até por isso a própria documentação do Spring recomenda o uso do mesmo.
O RestTemplate está em "modo de manutenção", ou seja, ele continua sendo levado para versões mais recentes do Spring, mas apenas com pequenas alterações e correções de bugs, logo o mesmo será depreciado.
Boa tarde!
Sou especialista Java, já havia implementado o WebClient, porém testa-lo está bem complexo.
vc tbm colocou esse webClient no arquivo executável ?
Vídeo excelente! Isso pode ser uma ideia de micro serviço?, mas por favor amigos me nome de Jesus, façam um vídeo consumindo uma api no nível de maturidade 3 pelo Front Angular.
Olá Vinicius!
Com certeza, você vai utilizar bastante esse recurso em uma arquitetura de microsserviços. Esse exemplo mesmo já é uma ideia bem simples dentro desse conceito.
Com relação a sua sugestão de vídeo, pode ter certeza que vou providenciar, já está anotado aqui!
Pra quem está com erro no block(), use a versão 11 pra cima do java, apanhei um fds pq estava na versão 8, ainda bem que li o comentário do @Emanuel Paiva Medeiros
Melhor WebClient ou Webflux ?
Faz aí a diferença