Introducción a Spring Boot: creación de una API REST simple en Java


Debido a la engorrosa configuración de dependencia, la configuración de Spring para aplicaciones empresariales se ha convertido en una tarea muy tediosa y propensa a errores. Esto es especialmente cierto para aplicaciones que también usan varias bibliotecas de terceros.


Cada vez que cree otra aplicación Java empresarial basada en Spring, debe repetir los mismos pasos de rutina para configurarla:


  • Dependiendo del tipo de aplicación que se esté creando (Spring MVC, Spring JDBC, Spring ORM, etc.), importe los módulos Spring necesarios
  • Importar una biblioteca de contenedor web (para aplicaciones web)
  • Importe las bibliotecas de terceros necesarias (por ejemplo, Hibernate, Jackson), mientras que debe buscar versiones compatibles con la versión especificada de Spring
  • Configure componentes DAO, tales como: fuentes de datos, gestión de transacciones, etc.
  • Configure los componentes de la capa web, como: administrador de recursos, resolución de vista
  • Defina una clase que cargará todas las configuraciones necesarias.

1. Presentación de Spring Boot


Los autores de Spring decidieron proporcionar a los desarrolladores algunas utilidades que automatizan el proceso de configuración y aceleran el proceso de creación e implementación de aplicaciones Spring, denominadas colectivamente Spring Boot


Spring Boot es un proyecto útil cuyo objetivo es simplificar la creación de aplicaciones basadas en Spring. Le permite crear una aplicación web de la manera más simple, lo que requiere un esfuerzo mínimo de los desarrolladores para configurar y escribir código.


2. Características de Spring Boot


Spring Boot tiene una gran funcionalidad, pero sus características más importantes son: gestión de dependencias, configuración automática y contenedores de servlets integrados.


2.1. Fácil gestión de dependencias


Para acelerar el proceso de administración de dependencias, Spring Boot empaqueta implícitamente las dependencias de terceros necesarias para cada tipo de aplicación basada en Spring y las proporciona al desarrollador a través de los llamados paquetes de inicio (spring-boot-starter-web, spring-boot-starter-data-jpa, etc.) .d.)


Los paquetes iniciales son un conjunto de descriptores de dependencia convenientes que puede incluir en su aplicación. Esto proporcionará una solución universal para todas las tecnologías relacionadas con Spring, evitando que el programador busque innecesariamente ejemplos de código y cargue los descriptores de dependencia necesarios de ellos (a continuación se mostrará un ejemplo de tales descriptores y paquetes de inicio)


Por ejemplo, si desea comenzar a usar Spring Data JPA para acceder a la base de datos, simplemente incluya la dependencia spring-boot-starter-data-jpa en su proyecto y listo (no tiene que buscar controladores de base de datos compatibles y bibliotecas de Hibernate)


Si desea crear una aplicación web Spring, simplemente agregue la dependencia web spring-boot-starter-web , que incorpora al proyecto todas las bibliotecas necesarias para desarrollar aplicaciones Spring MVC, como spring-webmvc , jackson-json , validation-api y Tomcat


En otras palabras, Spring Boot recopila todas las dependencias comunes y las define en un solo lugar, lo que permite a los desarrolladores simplemente usarlas, en lugar de reinventar la rueda cada vez que crean una nueva aplicación.


Por lo tanto, cuando se usa Spring Boot , el archivo pom.xml contiene muchas menos líneas que cuando se usa en aplicaciones Spring


Consulte la documentación de todos los paquetes de inicio de Spring Boot.


2.2. Configuración automática


La segunda característica excelente de Spring Boot es la configuración automática de la aplicación


Después de elegir el paquete de inicio apropiado, Spring Boot intentará configurar automáticamente la aplicación Spring en función de las dependencias jar que agregó


Por ejemplo, si agrega Spring-boot-starter-web , Spring Boot configurará automáticamente beans registrados como DispatcherServlet , ResourceHandlers , MessageSource


Si usa spring-boot-starter-jdbc , Spring Boot registra automáticamente los beans DataSource , EntityManagerFactory , TransactionManager y lee la información para conectarse a la base de datos desde el archivo application.properties


Si no va a utilizar la base de datos y no proporciona detalles sobre la conexión en modo manual, Spring Boot configurará automáticamente la base de datos en la memoria, sin ninguna configuración adicional de su parte (si hay bibliotecas H2 o HSQL)


La configuración automática se puede redefinir por completo en cualquier momento con la configuración del usuario


2.3. Soporte nativo para el servidor de aplicaciones - contenedor de servlets


Cada aplicación web Spring Boot incluye un servidor web incorporado. Eche un vistazo a la lista de contenedores de servlets que son compatibles de fábrica.


Los desarrolladores ya no tienen que preocuparse por configurar el contenedor de servlets y desplegar la aplicación en él. Ahora la aplicación puede comenzar por sí misma, como un archivo jar ejecutable utilizando el servidor incorporado


Si necesita usar un servidor HTTP separado, simplemente excluya las dependencias predeterminadas para esto. Spring Boot proporciona paquetes de inicio separados para diferentes servidores HTTP


La creación de aplicaciones web independientes con servidores integrados no solo es conveniente para el desarrollo, sino también una solución aceptable para aplicaciones de nivel empresarial y se está volviendo cada vez más útil en el mundo de los microservicios. La capacidad de empaquetar rápidamente un servicio completo (como la autenticación de usuario) en un artefacto independiente y completamente desplegable que también proporciona una API hace que la instalación y la implementación de la aplicación sean mucho más fáciles


3. Requisitos de instalación de Spring Boot


Para configurar y ejecutar aplicaciones Spring Boot, se requiere lo siguiente:


  • Java 8+
  • Apache Maven 3.x

4. Crear una aplicación Spring Boot


Ahora practiquemos e implementemos una API REST muy simple para aceptar pagos usando las capacidades de Spring Boot


4.1. Crear un proyecto web usando Maven


Cree un proyecto Maven en el IDE que está utilizando, llamándolo SpringBootRestService


Asegúrese de usar la versión Java 8+ ya que Spring Boot no funciona con versiones anteriores


4.2. Configuración Pom.xml


El segundo paso es configurar Spring Boot en el archivo pom.xml


Todas las aplicaciones Spring Boot se configuran desde spring-boot-starter-parent , por lo tanto, antes de definir las dependencias, agregue starter-parent de la siguiente manera:


<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> 

Porque Como estamos creando una API REST, es necesario usar spring-boot-starter-web como una dependencia, que define implícitamente todas las demás dependencias, como spring-core , spring-web , spring-webmvc , servlet api y la biblioteca jackson-databind , por lo tanto simplemente agregue lo siguiente a pom.xml:


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 

Ahora las siguientes bibliotecas jar se importan automáticamente a su proyecto:


imagen


El siguiente paso es agregar el complemento Spring Boot:


 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 

El último paso es hacer que Maven genere un archivo jar ejecutable durante el ensamblaje:


 <packaging>jar</packaging> 

A continuación se muestra el archivo completo pom.xml:


 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springboot.topjava.ru</groupId> <artifactId>SpringBootRestService</artifactId> <version>1.0</version> <packaging>jar</packaging> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

Como puede ver, usando una dependencia, podemos crear una aplicación web completamente funcional


4.3. Crear recursos REST


Ahora vamos a crear un controlador de pagos junto con clases POJO para solicitudes y respuestas


Escribamos la clase de solicitud de pago:


 package springboot.topjava.ru; public class PaymentRequest { private int userId; private String itemId; private double discount; public String getItemId() { return itemId; } public void setItemId(String itemId) { this.itemId = itemId; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } } 

Y también una clase que procesa la respuesta básica devuelta por nuestro servicio:


 package springboot.topjava.ru; public class BaseResponse { private final String status; private final Integer code; public BaseResponse(String status, Integer code) { this.status = status; this.code = code; } public String getStatus() { return status; } public Integer getCode() { return code; } } 

Ahora cree un controlador:


 package springboot.topjava.ru; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/payment") public class PaymentController { private final String sharedKey = "SHARED_KEY"; private static final String SUCCESS_STATUS = "success"; private static final String ERROR_STATUS = "error"; private static final int CODE_SUCCESS = 100; private static final int AUTH_FAILURE = 102; @GetMapping public BaseResponse showStatus() { return new BaseResponse(SUCCESS_STATUS, 1); } @PostMapping("/pay") public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) { final BaseResponse response; if (sharedKey.equalsIgnoreCase(key)) { int userId = request.getUserId(); String itemId = request.getItemId(); double discount = request.getDiscount(); // Process the request // .... // Return success response to the client. response = new BaseResponse(SUCCESS_STATUS, CODE_SUCCESS); } else { response = new BaseResponse(ERROR_STATUS, AUTH_FAILURE); } return response; } } 

4.4. Crear la clase de aplicación principal


Este último paso es crear una clase de configuración e iniciar la aplicación. Spring Boot admite la nueva anotación @SpringBootApplication , que es equivalente a usar @Configuration , @EnableAutoConfiguration y @ComponentScan con sus atributos predeterminados


Por lo tanto, solo necesita crear una clase anotada con @SpringBootApplication , y Spring Boot habilitará la configuración automática y escaneará sus recursos en el paquete actual:


 package springboot.topjava.ru; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

5. Implementación de la aplicación Spring Boot


Ahora aprovechemos la tercera gran característica de Spring Boot: es un servidor integrado. Todo lo que necesitamos hacer es crear un archivo jar ejecutable usando Maven y ejecutarlo como una aplicación independiente normal:


  • Ingrese al modo de línea de comando (comando cmd), vaya a la carpeta con pom.xml e ingrese el comando mvn clean package
  • Maven generará un archivo jar ejecutable llamado SpringBootRestService-1.0.jar
  • Ir a la carpeta de destino del CD
  • Luego ejecute el archivo jar: java -jar SpringBootRestService-1.0.jar
  • Vaya al navegador en http: // localhost: 8080 / payment

Nuestra API REST se está ejecutando y está lista para atender solicitudes a través del puerto 8080 (por defecto)


En este artículo, analizamos las capacidades de Spring Boot y creamos un ejemplo completamente funcional usando el servidor incorporado.


Fuente:
https://dzone.com/articles/introducing-spring-boot


En la traducción, la información se actualizó:


  • Spring-boot-starter-parent cambió la versión de 1.5.8.RELEASE a 2.1.1.RELEASE y, en consecuencia, se actualizó la lista de bibliotecas que Maven extrae
  • Se eliminaron las declaraciones del repositorio Spring, las dependencias se extraen del repositorio central
  • En la clase BaseResponse, los campos se hicieron finales, se agregó un constructor y se eliminaron los establecedores
  • En PaymentController, presentamos el método showStatus () con @GetMapping para probar la aplicación en el navegador
  • Se reemplazó @RequestMapping en métodos con @ GetMapping / @ PostMapping
  • También se realizaron cambios para implementar la aplicación desde la línea de comando

ACTUALIZACIÓN


Como señaló Lure_of_Chaos , ahora todo se puede hacer automáticamente a través de SPRING INITIALIZR . Y sin dejar su JetBrains IntelliJ IDEA favorita .

Source: https://habr.com/ru/post/es435144/


All Articles