Antes de empezar

1

Pasos para aprender Java Spring

2

驴Java sigue siendo gratuito?

3

Instalaci贸n de ambiente de desarrollo: Linux Ubuntu

4

Instalaci贸n de ambiente de desarrollo: macOS

5

Instalaci贸n de ambiente de desarrollo: Windows

Introducci贸n a Spring boot

6

驴Qu茅 es y qu茅 usaremos de Spring?

7

Conocer qu茅 es una aplicaci贸n autocontenida

8

Crear nuestra aplicaci贸n con Spring Initializr

9

Hola mundo con Spring Boot

10

Configurar Spring Boot

11

Crear la estructura del proyecto

Spring Data

12

驴Qu茅 es JPA?

13

Conocer qu茅 es Spring Data

14

Conectar la base de datos a nuestra aplicaci贸n

15

Mapear las tablas como clases

16

Crear Entity cuando su clave primaria es compuesta

17

Mapear relaciones entre clases

18

Usar la interface CrudRepository

19

Query Methods

Construyendo nuestra API

20

Implementar la anotaci贸n @Repository

21

驴Qu茅 es el patr贸n Data Mapper y qu茅 resuelve?

22

Orientar nuestra API al dominio con MapStruct

23

Orientar nuestro repositorio a t茅rminos del dominio

24

Inyecci贸n de dependencias

25

Implementar la anotaci贸n @Service

26

Implementar la anotaci贸n @RestController

27

Exponer nuestra API

Mejorando nuestra API

28

Controlar las respuestas HTTP

29

Crear el dominio de compras

30

Mapear el dominio de compras

31

Crear el repositorio de compras

32

Probando nuestros servicios de compras

33

Documentar nuestra API con Swagger

Spring Security

34

Configurar la seguridad de nuestra API con Spring Security

35

Generar un JWT

36

Autenticaci贸n con JWT

37

Autorizaci贸n con JWT

Despliegue de nuestra aplicaci贸n

38

Desplegar nuestra API desde la ventana de comandos

39

Desplegar nuestra base de datos con Heroku

40

Desplegar nuestra API con Heroku

41

Conclusiones y despedida del curso

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Java Spring

Curso de Java Spring

Alejandro Ram铆rez

Alejandro Ram铆rez

Documentar nuestra API con Swagger

33/41
Recursos

Aportes 34

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Si est谩n utilizando la versi贸n 3.0.0 de swagger, se debe tener en cuenta lo siguiente:

  • En el archivo bundle.gradle se debe a帽adir las siguientes l铆neas
    implementation "io.springfox:springfox-boot-starter:3.0.0"
    compile 鈥渋o.springfox:springfox-swagger-ui:3.0.0鈥

  • En la clase SwaggerConfig ya no hace falta a帽adir la anotaci贸n @EnableSwagger2

  • La url de acceso a la documentaci贸n es: {host}:{puerto} / {contexto} /swagger-ui/index.html

Me hubiera gustado que se toque un tema importante en la capa de servicios como lo son las transacciones. Espero que salga el curso avanzado de spring.

Hola, si llegan a tener un error de NullPointerException sin raz贸n alguna, s贸lo deben bajar la version de SpringBoot de 2.6.1 a 2.5.5 (estuve rato lidiando con ese error)

Una forma para ponerle un poco mas de detalle a nuestras APIS.


Si usan la versi贸n 3.0.0 de swagger y les aparece un null o
este error :
->Failed to start bean 鈥榙ocumentationPluginsBootstrapper鈥; nested exception is java.lang.NullPointerException

pueden solucionarlo agregando:
-> spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER en el application.properties

en el build.gradle:
-> implementation 鈥渋o.springfox:springfox-boot-starter:3.0.0鈥

Nota: En mi caso elimine del archivo SwaggerConfig la anotaci贸n @EnableSwagger2 .
-> estoy usando la versi贸n 2.6.4 de Spring.

para los que les sale el error de NullPointerException lo unico que deben hacer es ir al application.properties y agregar esta linea spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER

Excelente swagger2 y muy practico, seria bueno un curso para ver mas detalles

Genial, esto era lo que le faltaba que alguien ense帽ara
Este curso mil veces mejor de lo que esperaba

Quiero compartir con ustedes el proyecto que he estado usando con el fin de aprender Spring boot y que pueden encontrar en GitLab ac谩.

Puntos a tener en cuenta:

  1. Estoy usando Maven en lugar de Gradle
  2. Hasta este momento, no pienso usar Spring security
  3. Eleg铆 una jerarqu铆a de paquetes mucho m谩s plana que el usado en este curso
  4. Todo el desarrollo est谩 en ingl茅s
  5. Uso una nomenclatura ligeramente distinta (DAO en lugar de Repository, por ejemplo)
  6. Considero que empleo mejores pr谩cticas que las mostradas en este curso en ciertas partes del proyecto
  7. Si bien tengo a帽os en la industria, particularmente con Java, soy automatizador de pruebas y Spring no ha sido una herramienta con la que tenga experiencia. Por lo tanto, a煤n me queda mucho por aprender y mejorar.

Este v铆deo se me hace que qued贸 corto. Me parece genial el v铆deo pero quiz谩 un par de v铆deos extras agregando el uso de examples y tags en los endpoints, as铆 como su uso en conjunto con bean validation hubiese sido de mayor provecho.

Me pas茅 medio hora solucionando un error en el que swagger no indicaba la documentaci贸n con el mensaje 鈥淣o operations defined in spec!鈥.

Resulta que hab铆a puesto la direcci贸n del paquete con ; jajaj excelente curso, espero con ansias el curso avanzado de spring !

Tengo este error al realizar los cambios en SwaggerConfig, estoy usando springboot 2.6.2. (Hasta abajo la solucion)

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null

Por lo cual mejor uso springdoc para swagger documentation. Vean mi respuesta en https://stackoverflow.com/questions/70036953/springboot-2-6-0-spring-fox-3-failed-to-start-bean-documentationpluginsboot

La forma en la que el profesor implementa Swagger ya no funciona hoy en d铆a, le dejo el link de maven repository para que solo copien y agreguen el archivo build.gradle

// https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.12'

lo pueden ver en la documentaci贸n: https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui/1.5.12

Recuerden ya no va ser necesario crear en archivo SwaggerConfig que crea el profesor.

para acceder a la documentacion:

http://localhost:8090/api/swagger-ui.html

Espero les sirva !!

Hola compa帽eros. Me parece excelente esta clase y que se a帽ada Swagger para documentar nuestra API, creo que es muy importante hacer esto y sobretodo cuando queremos mostrarla a otros developers que no han estado durante la etapa de dise帽o.

Adem谩s les quiero compartir que Swagger no es la 煤nica manera de hacer esto, hay otra alternativa llamada RAML que esta bastante interesante y que us茅 para un proyecto con Node.js hace un tiempo. Les dejo el link:
https://raml.org/

Existe un spring boot starter para swagger que incluye las dos dependencias mostradas ac谩:

    // Maven
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-boot-starter</artifactId>
      <version>${swagger2.version}</version>
    </dependency>
// Gradle
implementation 'io.springfox:springfox-boot-starter:3.0.0'

Para usar la versi贸n 2.9.2 de Swagger con la version de SpringBoot 2.6+, se debe colocar esta propiedad en application.properties

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

Saludos es genial esta clase y poder Documentar nuestra API con Swagger aunque personalmente he tenido problemas con las versiones que se proponen en esta clase. Tal como se plantea a mi me aparec铆a el siguiente error justo despu茅s de levantar el servicio:

java.lang.NullPointerException: null.

y despue茅 me lo paraba.

Entonces googleando y despu茅s de varios d铆as y de ayuda de los comentarios que Swagger est谩 incluida en springdoc-openapi-ui y que no es necesario configurarlo con la clase Swagger config, basta con a帽adir la de pendencia en gradle:

implementation 'org.springdoc:springdoc-openapi-ui:1.6.6'

borrar las otras i listo,documentaci贸n en el context path.

Referencias.
https://springdoc.org/#migrating-from-springfox
https://www.baeldung.com/spring-rest-openapi-documentation

Posteriormente a mi comentario anterior sobre sustituir las dos dependencias que mencion贸 el Profesor por solo una, las anotaciones (como @ApiOperation o @ApiParam) en la clase SwaggerConfig tambi茅n cambiar谩n, por lo que los m茅todos getAll y getProduct fueron modificados de esta manera:

@GetMapping("/all")
    @Operation(summary = "Get all supermarket products")
    @ApiResponse(responseCode = "200", description = "OK")
    public ResponseEntity<List<Product>> getAll() {
        return new ResponseEntity<>(productService.getAll(), HttpStatus.OK);
    }
@GetMapping("/{id}")
    @Operation(summary = "Search a product with an ID")
    @ApiResponses({
            @ApiResponse(responseCode = "200", description = "OK"),
            @ApiResponse(responseCode = "404", description = "Product not found")
    })
    public ResponseEntity<Product> getProduct(@Parameter(description = "The ID of the product", required = true, example = "7")
                                                  @PathVariable("id") int productId) {
        return productService.getProduct(productId)
                .map(product -> new ResponseEntity<>(product, HttpStatus.OK))
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

Espero les sirva.
Saludos !!

Si tambi茅n tienen el mismo problema del error fantasma 鈥淣ullPointerException鈥 pues encontr茅 una soluci贸n, agregando la siguiente linea en el archivo de 鈥渁pplication.properties鈥:

spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER

Alejandro buenas tardes, ser铆a bastante interesante complementar el curso con el Update, el cual es parte del CRUD.
Saludos y agradezco se remita alguna documentaci贸n al respecto, para complementar el ejercicio.

Cu谩l es la funci贸n de spring-fox? Dar un interf谩z grafica.

Los endpoint me funcionan bien, pero no me genera la documentacion, alguien sabe porque ??

Excelente forma de documentar la Apis, he utilizado esta forma y es muy interesante, aprendiendo cada dia mucho mas.

Documentaci贸n del Controller hacia Swagger

Hola! A quienes est茅n usando la versi贸n 3.0.0 de Swagger, les comento que es lo que funcion贸 en mi caso:

En el build.gradle

dependencies {
	...
	implementation 'io.springfox:springfox-boot-starter:3.0.0'
	implementation 'io.springfox:springfox-swagger-ui:3.0.0'
}

En el archivo SwaggerConfig.java

@Configuration
public class SwaggerConfig {
    private String controllersBasePackage = "com.jessat18.market.web.controller";

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(controllersBasePackage))
                .build();
    }
}

Y en PlatziMarketApplication.java

@EnableWebMvc
@SpringBootApplication
public class PlatziMarketApplication {

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

Para ingresar en esta nueva versi贸n, deben ingresar a帽adiendo /swagger-ui/index.html, quedando:

{puerto}/{contexto}/swagger-ui/index.html

Que gran forma de documentar las apis. Genial!

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

No me quedo muy claro el uso de la notacion
@Bean y @Configuration
Para que son y que m谩s se puede implementar con ellas?
Gracias

Swagger se debe utilizar en produccion? si es asi es posible desactivar que se envien los metodos post, put y delete?

Dependencias:

implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'

clase super util, gracias profe

jajaja no estoy acostumbrado a ver documentaci贸n

Espero que se realice un curso profundizando un poco m谩s swagger !

Excelente!!