{"id":15196835,"url":"https://github.com/alexnarvaez00/spring-boot-blog","last_synced_at":"2026-03-09T14:07:23.106Z","repository":{"id":214126144,"uuid":"735755111","full_name":"AlexNarvaez00/Spring-Boot-Blog","owner":"AlexNarvaez00","description":"¡Hola! 👋  Aquí te dejo unos cuantos post sobre lo que he ido aprendiendo sobre esta gran tecnología, si algo te sirve o te ha sido útil no olvides compartirlo, muchas Gracias🧐 .  ","archived":false,"fork":false,"pushed_at":"2023-12-26T19:20:31.000Z","size":943,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T09:17:13.930Z","etag":null,"topics":["backend","course","java","java-20","java-8","java-spring-boot","java-springboot","spring-boot","spring-framework"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexNarvaez00.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-26T02:17:39.000Z","updated_at":"2023-12-26T19:15:05.000Z","dependencies_parsed_at":"2024-09-18T22:04:03.788Z","dependency_job_id":null,"html_url":"https://github.com/AlexNarvaez00/Spring-Boot-Blog","commit_stats":null,"previous_names":["alexnarvaez00/spring-boot-blog"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNarvaez00%2FSpring-Boot-Blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNarvaez00%2FSpring-Boot-Blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNarvaez00%2FSpring-Boot-Blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNarvaez00%2FSpring-Boot-Blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexNarvaez00","download_url":"https://codeload.github.com/AlexNarvaez00/Spring-Boot-Blog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241482101,"owners_count":19969850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","course","java","java-20","java-8","java-spring-boot","java-springboot","spring-boot","spring-framework"],"created_at":"2024-09-28T00:04:42.992Z","updated_at":"2026-03-09T14:07:23.070Z","avatar_url":"https://github.com/AlexNarvaez00.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Curso básico de Spring Boot, con buenas prácticas.\n\n* [¿Que es Spring Boot, y que es Spring Framework?](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#que-es-spring-boot-y-que-es-spring-framework)\n    * [Spring Boot 🍃.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#spring-boot-)\n    * [Spring Framework 🖼️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#spring-framework-%EF%B8%8F)\n    * [Comparación ☕.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#comparaci%C3%B3n-)\n* [Requerimientos 📃.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#requerimientos-)\n    * [Instalación de Java (20) 🍵.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#instalaci%C3%B3n-de-java-20-)\n    * [Instalación de Maven ⬇️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#instalaci%C3%B3n-de-maven-%EF%B8%8F)\n* [Creación de un Proyecto 🏭.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#creaci%C3%B3n-de-un-proyecto-)\n    * [Dependencias necesarias para Spring Boot 🐀.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#dependencias-necesarias-para-spring-boot-)\n* [Editores ⌨️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#editores-%EF%B8%8F)\n* [Ejecución de nuestro proyecto Spring Boot 🚀.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#ejecuci%C3%B3n-de-nuestro-proyecto-spring-boot-)\n    * [Edición del archivo de configuración ⚙️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#edici%C3%B3n-del-archivo-de-configuraci%C3%B3n-%EF%B8%8F)\n    * [Desde la terminal 🖥️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#desde-la-terminal-%EF%B8%8F)\n* [Anotaciones ✍🏻.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#anotaciones-)\n    * ¿[Que son las anotaciones?](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#que-son-las-anotaciones)\n    * ¿[Donde se utilizan?](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#donde-se-utilizan)\n* [Lombok 🌶️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#lombok-%EF%B8%8F)\n    * [Utilidades y ventajas ♟️.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#utilidades-y-ventajas-%EF%B8%8F)\n    * [Anotaciones básicas 📝.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#anotaciones-b%C3%A1sicas-)\n* [Controladores REST🎮.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#controladores-rest)\n    * [Definir una ruta 🏁.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#definir-una-ruta-)\n    * [Verbos.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#verbos)\n    * [Solicitudes 👥.](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#solicitudes-)\n\n\n# ¿Que es Spring Boot, y que es Spring Framework?\n\n## Spring Boot 🍃.\n\nSpring Boot es un marco de desarrollo de aplicaciones en Java basado en el framework Spring. Nos proporciona una forma rápida y sencilla de crear aplicaciones Java con una configuración mínima.\n\nUna de las principales características de Spring Boot es su enfoque en la convención sobre la configuración. Esto significa que muchas de las configuraciones necesarias para una aplicación, Spring se pueden establecer automáticamente, lo que nos permite como desarrolladores es en enfocarse en la lógica de negocio en lugar de una configuración detallada.\n\nAdemás, Spring Boot incluye un servidor web integrado, lo que significa que no es necesario configurar y desplegar una aplicación en un servidor web externo. Esto nos facilita el desarrollo y la ejecución de aplicaciones web de forma rápida y sencilla.\n\nSpring Boot también ofrece una amplia gama de características y funcionalidades para el desarrollo de aplicaciones empresariales, como la integración con bases de datos, la seguridad, la gestión de transacciones y la creación de servicios web.\n\nEn resumen, Spring Boot es un marco de desarrollo de aplicaciones Java que simplifica la configuración y el desarrollo de aplicaciones empresariales, que nos permite centrarnos en la lógica de negocio y la funcionalidad de la aplicación.\n\n## Spring Framework 🖼️.\n\nSpring Framework es un framework de desarrollo de aplicaciones Java que proporciona una infraestructura integral y modular para desarrollar aplicaciones empresariales. Es conocido por su enfoque basado en componentes, su facilidad de uso y su capacidad de integración con otras tecnologías.\n\nEl objetivo principal de Spring Framework es simplificar el desarrollo de aplicaciones Java al proporcionar una abstracción de alto nivel sobre las APIs de Java, lo que facilita la implementación de patrones de diseño y buenas prácticas de programación. Además, Spring Framework ofrece características como la inversión de control (IoC) y la inyección de dependencias (DI), que ayudan a reducir la dependencia entre los componentes de la aplicación y promueven la reutilización del código.\n\nSpring Framework también incluye módulos para diferentes aspectos de desarrollo, como el acceso a bases de datos, la seguridad, el manejo de transacciones y la creación de servicios web. Estos módulos se pueden utilizar de forma independiente o combinados según las necesidades del proyecto.\n\nEn resumen, Spring Framework es un framework completo y flexible que simplifica el desarrollo de aplicaciones Java al proporcionar una infraestructura modular, características de alto nivel y una amplia integración con otras tecnologías.\n\n## Comparación ☕.\n\n| Aspecto | Spring Boot | Spring Framework |\n| --- | --- | --- |\n| Configuración. | Requiere configuración mínima debido a su enfoque en la convención sobre la configuración. | Requiere configuración detallada y manual. |\n| Despliegue | Incluye un servidor web integrado, lo que facilita el desarrollo y la ejecución de aplicaciones web. | Requiere configurar y desplegar la aplicación en un servidor web externo. |\n| Desarrollo de aplicaciones empresariales. | Ofrece una amplia gama de características y funcionalidades para el desarrollo de aplicaciones empresariales, como integración con bases de datos, seguridad, gestión de transacciones y creación de servicios web. | También ofrece características para el desarrollo de aplicaciones empresariales, pero requiere configuración manual y uso de módulos adicionales. |\n| Enfoque | Se centra en simplificar la configuración y el desarrollo de aplicaciones Java, permitiendo a los desarrolladores centrarse en la lógica de negocio y la funcionalidad de la aplicación. | Se enfoca en proporcionar una infraestructura integral y modular para el desarrollo de aplicaciones Java, promoviendo buenas prácticas de programación y reutilización del código. |\n| Uso de anotaciones | Utiliza anotaciones para configurar y definir componentes, controladores, rutas, entre otros. | También utiliza anotaciones, pero requiere más configuración manual en comparación con Spring Boot. |\n| Facilidad de uso | Proporciona una forma rápida y sencilla de crear aplicaciones Java con configuración mínima. | Requiere más configuración y conocimiento técnico para su implementación. |\n\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Requerimientos 📃.\n\nUn proyecto de Spring Boot, necesitan algunas cosas. En este caso, utilizaremos Maven como gestor de dependencias, aunque existen otros gestores de dependencias como Gradle.\n\n## Instalación de Java (20) 🍵.\n\nLa descarga de Java en su versión 20 la puedes realizar desde la siguiente [página](https://www.oracle.com/java/technologies/javase/jdk20-archive-downloads.html) 📎, recuerda elegir correctamente tu sistemas Operativo.\n\n- Instalación Linux (Ubuntu).\n    \n    ```bash\n    #El nombre puede variar\n    sudo dpkg -i jdk-20.0.2_linux-x64_bin.deb\n    ```\n    \n    Puede que al momento de ejecutar el comando `java —version` nos indique que no esta instalado, para dar solución a este problema, debes de ingresar los siguiente comandos.\n    \n    ```bash\n    # Primer Comando.\n    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-20/bin/java 1\n    # Segundo Comando.\n    udo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-20/bin/javac 1\n    #Terc\n    sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk-20/bin/jar 1er comando.\n    ```\n    \n    Recuerda que debes de cambiar `jdk-20` por la versión que hayas instalado de Java.\n    \n\n## Instalación de Maven ⬇️.\n\nPuedes descargar esta herramienta desde la página oficial. Te recomiendo que descargues la última versión disponible, ya que también estamos trabajando con la última versión de Java.\n\n```bash\n# Descarga, recuerda que puede cambiar.\nwget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz\n```\n\nEjecuta el siguiente comando para extraer los recursos en la ruta `/opt`.\n\n```bash\nsudo tar xzf apache-maven-3.8.8-bin.tar.gz -C /opt\n```\n\nDespués, navega a la carpeta `/opt` y cambia el nombre de la carpeta. Este paso es necesario, ya que más adelante utilizaremos esa ruta.\n\n```bash\nsudo mv apache-maven-3.8.8/ maven/\n```\n\nLuego, ve a la siguiente ruta.\n\n```bash\ncd /etc/profile.d/\n```\n\nCrea el siguiente archivo.\n\n```bash\ntouch maven.sh\n```\n\nIngresa las siguientes líneas dentro del mismo archivo.\n\n```bash\nexport M2_HOME=/opt/maven\nexport PATH=${M2_HOME}/bin:${PATH}\n```\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Creación de un Proyecto 🏭.\n\nCrear un proyecto de Spring Boot, es tan sencillo como ingresar a su [sitio oficial](https://start.spring.io/), recuerda que debes de seleccionar Maven y la versión de Java correspondiente.\n\n![Untitled](src/Untitled.png)\n\n## Dependencias necesarias para Spring Boot 🐀.\n\n- Uso de la página de init.\n    \n    Debes de dar clic en el botón de `add dependencies`.\n    \n- Dependencias necesarias.\n    \n    Las dependencias que debes agregar para iniciar un proyecto de Spring Boot son:\n    \n    - **Spring Web**: Esta dependencia proporciona las funcionalidades necesarias para crear aplicaciones web con Spring.\n    - **Lombok**: Lombok es una biblioteca que ayuda a reducir la cantidad de código repetitivo en las clases Java, proporcionando anotaciones que generan automáticamente métodos y constructores.\n    - **Spring Boot DevTools**: Esta dependencia ofrece herramientas para facilitar el desarrollo y la configuración de aplicaciones Spring Boot.\n    - **Validación**: Esta dependencia permite realizar validaciones de datos de manera sencilla y consistente en las aplicaciones.\n    - **Spring Data JPA**: Spring Data JPA simplifica el acceso y la manipulación de los datos en la base de datos utilizando el patrón de acceso a datos Object-Relational Mapping (ORM).\n    \n    Estas dependencias son esenciales para iniciar un proyecto de Spring Boot y aprovechar al máximo las características y funcionalidades que ofrece el framework.    \n     \n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n\n# Editores ⌨️.\n\n![Untitled](src/Untitled%201.png)\n\nPuedes utilizar el editor que más te guste. Algunos buenos editores para programar en Java son Eclipse y Visual Studio Code, junto con las extensiones específicas para este lenguaje.\n\nAquí te presento una lista de algunos editores que son recomendados por su funcionalidad y facilidad de uso:\n\n- **Neovim:** Un editor de texto muy versátil que cuenta con numerosas características y plugins que te ayudarán a mejorar tu experiencia de programación.\n- **Eclipse:** Un entorno de desarrollo integrado (IDE) muy popular para programar en Java. Proporciona herramientas poderosas para crear y depurar aplicaciones Java.\n- **Visual Studio Code:** Un editor de código ligero y altamente personalizable. Es compatible con una amplia gama de lenguajes de programación y tiene una gran cantidad de extensiones disponibles para facilitar el desarrollo en Java.\n\nAsí que no dudes en probar estos editores y elegir el que mejor se adapte a tus necesidades y preferencias.\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Ejecución de nuestro proyecto Spring Boot 🚀.\n\n## Edición del archivo de configuración ⚙️.\n\nAntes de ejecutar el proyecto, debemos buscar el archivo de configuración de Spring Boot llamado `application.properties`. Una vez que hayamos encontrado dicho archivo, debemos cambiar su extensión a `yml`.\n\n![Untitled](src/Untitled%202.png)\n\nPosteriormente, necesitamos agregar las siguientes líneas al archivo `application.yml`. No te preocupes si aún no entiendes lo que estamos configurando, más adelante profundizaremos en el tema.\n\n```yaml\n# Configuracion básica de la conexión a una base\n# de datos. \nspring:\n\tdatasource: \n\t\turl: jdbc:h2:men:MyDB\n\t\tusername: sa\n\t\tdriverClassName: org.h2.Driver\n```\n\n## Desde la terminal 🖥️.\n\nEjecutar nuestro proyecto Spring Boot desde la terminal, es tan sencillo como situarnos en la carpeta raíz de nuestro proyecto e ingresar el siguiente comando, debes de tener en cuenta que la primera ejecución puede tardar unos minutos ya que es necesario descargar todas las dependencias.\n\n```bash\nmvn spring-boot:run\n```\n\n![Untitled](src/Untitled%203.png)\n\nUna vez ejecutada nuestra aplicación, podemos ingresar desde el navegador con la siguiente URL [**localhost:8080](http://localhost:8080/).**\n\n- Errores al ejecutar y sus soluciones.\n\nUnos de los errores más comunes al iniciar un proyecto de Spring Boot, es el error de la URL, dicho error ocurre cuando no hemos especificado la URL de la conexión de bases de datos, dicho error se soluciona con el primer paso de este apartado.\n\nOtro de los errores mas comunes es que nuestra aplicación de Spring Boot no inicie, debido a que nuestra versión de java instalada, es una versión menor que la versión utilizada es nuestro proyecto, esto lo puede verificar el archivo `pom.xml`.\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cproject xmlns=\"....\" xmlns:xsi=\"....\"\n\txsi:schemaLocation=\"....\"\u003e\n\t....\n\t\u003cgroupId\u003ecom.personal\u003c/groupId\u003e\n\t\u003cartifactId\u003eapp\u003c/artifactId\u003e\n\t\u003cversion\u003e0.0.1-SNAPSHOT\u003c/version\u003e\n\t\u003cname\u003eapp\u003c/name\u003e\n\t\u003cdescription\u003eMy firts proyect\u003c/description\u003e\n\t\u003cproperties\u003e\n\t\t\u003cjava.version\u003e17\u003c/java.version\u003e\n\t\u003c/properties\u003e\n\t\u003cdependencies\u003e\n\t\t...\n\t\u003c/dependencies\u003e\n\n\t\u003cbuild\u003e\n\t\t\u003cplugins\u003e\n\t\t\t...\n\t\t\u003c/plugins\u003e\n\t\u003c/build\u003e\n\n\u003c/project\u003e\n```\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Anotaciones ✍🏻.\n\n## ¿Que son las anotaciones?\n\nEn Java, las anotaciones son etiquetas especiales que se colocan encima de clases, métodos o campos para proporcionar información adicional sobre ellos. Son como notas que le da al compilador o al entorno de ejecución para que sepa cómo manejar ciertas partes de tu código.\n\n## ¿Donde se utilizan?\n\nLas anotaciones de Java se pueden utilizar en los siguientes lugares.\n\n- **Encima de una Clase:** Se define el propósito general de la clase.\n    \n    ```java\n    @RestController(\"persons\")\n    public class PersonController{ \n    ...\n    }\n    ```\n    \n- **Encima de métodos:** Especifica cómo debe comportarse un método en particular.\n    \n    ```java\n    @RestController(\"persons\")\n    public class PersonController{ \n    \t@RequestMapping(\"\")\n    \tpublic String index(){\n    \t\t...\n    \t}\n    }\n    ```\n    \n- **Encima de campos:** Proporciona información sobre cómo se debe manejar un campo.\n    \n    ```java\n    @RestController(\"persons\")\n    public class PersonController{\n    \t@Autowired\n    \tprivate MyService service; \n    \t...\n    }\n    ```\n    \n- **Al lado de parámetros:** Define cómo se deben tratar los parámetros de un método.\n    \n    ```java\n    \n    @RestController(\"persons\")\n    public class PersonController{ \n    \t@RequestMapping(\"\")\n    \tpublic String index(@RequestParam(\"name\") String name){\n    \t\t...\n    \t}\n    }\n    \n    ```\n    \n\nLas anotaciones en Spring Boot son esenciales porque simplifican la configuración y el desarrollo de aplicaciones. Permitiendo a Spring Boot encargarse de muchos aspectos, como la gestión de dependencias, la configuración de componentes y la creación de instancias de clases de manera automática.\n\nEn resumen,  las anotaciones en Java, especialmente en Spring Boot, te permiten etiquetar tu código de manera especial para que el framework pueda entender y gestionar mejor tu aplicación. Hacen que el desarrollo sea más rápido, fácil de entender y menos propenso a errores. \n\n¡Es como darle a tu código un conjunto de instrucciones para que Spring Boot lo maneje de la mejor manera posible!\n\n¡No te preocupes si no entendiste los ejemplos mostrados, son solo eso EJEMPLOS! Más adelante se explicara su funcionamiento a detalle, lo que es importante es que  entiendas el posicionamiento de las anotaciones.\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Lombok 🌶️.\n\nLombok es una biblioteca que simplifica la creación de clases y reduce la cantidad de código que necesita escribir. Su objetivo es hacer tu vida como desarrollador más fácil y tu código más limpio.\n\nEn Spring Boot, Lombok es como un superpoder ya que ayuda a simplificar la creación de entidades, servicios y otros componentes. Te permite reducir el código boilerplate (ese código repetitivo que no agrega mucha lógica) y concentrarte en lo que realmente importa.\n\n## Utilidades y ventajas ♟️.\n\n- **Menos código, más claro:** Lombok elimina la necesidad de escribir getters y setters, constructores y otros métodos comunes. ¡Menos código significa más claridad y menos posibilidades de errores!.\n    \n    ```java\n    @Getter \n    @Setter\n    public class Person{\n    \tprivate String name;\n    \n    \t// ❌: No necesitas escribirlo.\n    \tpublic void setName(String name){...}\n    \tpublic String getName(){...}\n    }\n    ```\n    \n- **Código más limpio:** Al usar anotaciones como **`@Data`** o **`@Builder`**, puedes generar automáticamente métodos que de otra manera tendrías que escribir a mano. Esto hace que tu código sea más limpio y fácil de entender.\n    \n    ```java\n    @Data\n    @Builder\n    public class Person{\n    \tprivate String name;\n    \n    \t// ❌: No necesitas escribirlo.\n    \tpublic void setName(String name){...}\n    \tpublic String getName(){...}\n    }\n    \n    // \n    var person = Person.builder()\n    \t\t\t\t\t\t\t.name(\"test\")\n    \t\t\t\t\t\t\t.build();\n    ```\n    \n- **Más rápido desarrollo:** Al reducir la cantidad de código que necesitas escribir, puedes construir tus aplicaciones más rápido.\n\n## Anotaciones básicas 📝.\n\nLombok contiene muchas anotaciones que son muy útiles, entre ellas nos encontramos las siguientes.\n\n- @Getter\n    \n    ```java\n    @Getter\n    public class Point{\n    \tpublic int x;\n    \tpublic int y;\n    \t// ❌ No es necesario escribir los \"getters\" \n    \tpublic int getX(){...}\n    }\n    ```\n    \n- @Setter\n    \n    ```java\n    @Setter\n    public class Point{\n    \tpublic int x;\n    \tpublic int y;\n    \t// ❌ No es necesario escribir los \"setters\" \n    \tpublic void setX(int x){...}\n    }\n    ```\n    \n- @Data\n    \n    ```java\n    @Data\n    public class Point{\n    \tpublic int x;\n    \tpublic int y;\n    \t// ❌ No es necesario escribir los \"setters\" ni los \"getters\" \n    \tpublic void setX(int x){...}\n    \tpublic int getX(){...}\n    }\n    ```\n    \n- @Builder\n    \n    Nos provee del patrón de diseño Builder.\n    \n    ```java\n    @Data\n    @Builder\n    public class Person{\n    \tprivate String name;\n    }\n    \n    // \n    var person = Person.builder()\n    \t\t\t\t\t\t\t.name(\"test\")\n    \t\t\t\t\t\t\t.build();\n    ```\n    \n- @AllArgsConstructor\n    \n    Provee de una constructor con todos los argumentos necesarios para crear el objeto.\n    \n- @NoArgConstructor\n    \n    Provee de un constructor vacío.\n\n[⬆ Volver](https://github.com/AlexNarvaez00/Spring-Boot-Blog?tab=readme-ov-file#curso-b%C3%A1sico-de-spring-boot-con-buenas-pr%C3%A1cticas)\n\n# Controladores REST🎮.\n\nLos controladores REST son una clase que maneja las solicitudes HTTP y define cómo responder a ellas. Estas solicitudes pueden ser de diferentes tipos, como obtener información (GET), enviar datos nuevos (POST), actualizar información existente (PUT), o eliminar datos (DELETE).\n\n## Definir una ruta 🏁.\n\nDefinir una ruta es muy sencillo, ya que necesitamos agregar una anotación, en una clase, te recomiendo que esta clase lleve el nombre `Controller` después del nombre del recurso, ya de esta forma es más simple identificarlo.\n\n```java\n@RestController(value = \"person\")\npublic class PersonController{\n\t...\n}\n```\n\nEsta clase lleva como nombre de ruta `person`, que podremos acceder desde cualquier cliente HTTP con la siguiente ruta `localhost:8080/person`.\n\n## Verbos.\n\nCuando necesitamos especificar que un método responda a una solicitud en especifico, debemos de indicar con una anotación por encima del método dependiendo del verbo que necesitemos.\n\n- Método GET\n    \n     \n    \n    ```java\n    @RestController(value = \"person\")\n    public class PersonController{\n    \t@GetMapping( value = \"/otra-ruta-si-es-necesaria\")\n    \tpublic String[] index(){\n    \t\t...\n    \t} \n    }\n    ```\n    \n- Método POST\n    \n    ```java\n    @RestController(value = \"person\")\n    public class PersonController{\n    \t@PostMapping( value = \"/otra-ruta-si-es-necesaria\")\n    \tpublic void store(){\n    \t\t...\n    \t} \n    }\n    ```\n    \n- Método PUT\n    \n    ```java\n    @RestController(value = \"person\")\n    public class PersonController{\n    \t@PutMapping( value = \"/otra-ruta-si-es-necesaria\")\n    \tpublic Person update(){\n    \t\t...\n    \t} \n    }\n    ```\n    \n- Método PATCH\n    \n    ```java\n    @RestController(value = \"person\")\n    public class PersonController{\n    \t@PatchMapping( value = \"/otra-ruta-si-es-necesaria\")\n    \tpublic Person update(){\n    \t\t...\n    \t} \n    }\n    ```\n    \n- Método DELETE\n    \n    ```java\n    @RestController(value = \"person\")\n    public class PersonController{\n    \t@DeleteMapping( value = \"/otra-ruta-si-es-necesaria\")\n    \tpublic void destroy(){\n    \t\t...\n    \t} \n    }\n    ```\n    \n\n## Solicitudes 👥.\n\nLas solicitudes HTTP se gestionan mediante controladores, y las anotaciones **`@RequestBody`** y **`@RequestParam`** son herramientas esenciales para trabajar con datos de las solicitudes, estas anotaciones se utilizan en los parámetros los métodos que hayan sido anotados con las anotaciones correspondientes.\n\n- **@RequestParam**:  Esta anotación se utiliza para extraer datos directamente de la URL de la solicitud, es muy útil para acceder a parámetros de consulta (query parameters) en las solicitudes GET.\n    \n    ```java\n    @GetMapping(\"/greet\")\n    public String greet(@RequestParam(name = \"name\") String name) {\n        return \"Hi, \" + name + \"!\";\n    }\n    ```\n    \n    En este ejemplo, si la URL es **`/greet?name=alex`**, el método **`greet`** tomará el valor de \"name\" de la solicitud y responderá con \"Hi, alex!\".\n    \n- **@RequestBody**: Esta anotación se utiliza para extraer datos del cuerpo (body) de la solicitud. Es comúnmente utilizada con solicitudes POST y PUT para enviar datos en el cuerpo de la solicitud.\n    \n    Esta anotación, se utiliza para mapear el cuerpo de la solicitud a un objeto Java, recuerda que esta objeto debe tener los métodos Getter y Setter.\n    \n    ```java\n    @PostMapping(\"/product\")\n    public String store(@RequestBody Product product) {\n        // Logica para crear producto.\n        return \"Prodcut created: \" + product.getName();\n    }\n    ```\n    \n- **Parámetros de URL**: Se utiliza para extraer valores de variables de la URI de una solicitud. Esto es especialmente útil cuando necesitas capturar valores dinámicos dentro de la URL.\n    \n    ```java\n    @GetMapping(\"/{id}\")\n    public String show(@PathVariable Long id) {\n    \t// Lógica para obtener y devolver el producto con el ID proporcionado\n    \treturn \"Product with ID: \" + id;\n    }\n    ```\n    \n    La anotación **`@GetMapping(\"/{id}\")`** especifica que este método manejará solicitudes GET en la URL **`/{id}`**, donde **`{id}`** es una variable de la ruta.\n    \n    La anotación **`@PathVariable Long id`** indica que el valor de la variable **`id`** se extraerá de la posición correspondiente en la URL y se pasará como argumento al método **show**.\n    \n    Entonces, si la URL de la solicitud es **`/123`**, el método `show` recibirá **`123`** como valor para la variable **`id`**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexnarvaez00%2Fspring-boot-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexnarvaez00%2Fspring-boot-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexnarvaez00%2Fspring-boot-blog/lists"}