Spring + Firebird + REST. Parte 1 Configuración del proyecto

En lugar de unirse


Si está desarmando algo, intente describirlo en un lenguaje claro y encuentre a alguien que lea y haga comentarios (reformuló R. Feynman, pero sí, lo hice).
Todos los comentarios, incluso viciosos en el estilo de "Sí, que esto ~ blanco ~~ personas se permite "bienvenido".


Objetivos


Aplicaciones : mostrar informes sobre el progreso del producto (escalas), si es posible, con la distribución de estos datos a través de la red dentro de la empresa (para la funcionalidad);
Personal : un poco de comprensión de la tecnología de primavera


Tecnología


  • Web de primavera
  • Primavera jpa
  • Lombok
    • Thymeleaf
  • SpringFox Swagger (voy a probar descansar en él)
  • jaybird-jdk17, versión 3.0.5
  • Maven

Motivación Gash Spring + Firebird


Recientemente, se realizó el primer lugar de cliente en Linux Mint para el operador Ovsezavod y la visualización de informes de Wine no siempre fue adecuada. (todo lo demás funciona bien - visualización Qt - SCADA, archivos Java SE).


Un rastrillo que tenía que ser pisado


  1. dependencias de Jackson de diferentes versiones (fijo),
  2. firebird no establece el tipo de codificación conduce a valores predeterminados NINGUNO,

Enlace a git al final de la publicación.


Jackson y todos todos todos


Diferentes componentes arrastrados en jackson de diferentes versiones, ya que es desagradable, es necesario arreglarlo.
Revelado por el equipo


mvn dependency:tree -Dincludes=com.fasterxml.jackson.core +- org.springframework.boot:spring-boot-starter-web:jar:2.1.0.RELEASE:compile [INFO] | \- org.springframework.boot:spring-boot-starter-json:jar:2.1.0.RELEASE:compile [INFO] | \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.7:compile [INFO] \- io.springfox:springfox-swagger2:jar:2.7.0:compile [INFO] \- io.swagger:swagger-models:jar:1.5.13:compile [INFO] \- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.5:compile 

Lo arreglamos en pom.


  <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.7</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.7</version> </dependency> 

Corregido, aprox. Resultó. Si está utilizando IDEA, es aún más fácil ver Bibliotecas externas . Que hay todas las dependencias y que son las versiones correctas.


Estructura de aplicación general


No estoy familiarizado con las pruebas de arranque de la aplicación, así que lo haré sin pruebas
("Sí, ese # color de piel se permite").


Configuración de la aplicación


Como soy un desarrollador experimentado y, por lo tanto, no estoy familiarizado con los métodos establecidos, haré:


  1. en application.yml (al configurar una conexión de base de datos)
     spring: datasource: driver-class-name: org.firebirdsql.jdbc.FBDriver url: jdbc:firebirdsql://host:3050//work/cmn/db/namedb.fdb?sql_dialect=3&charSet=utf-8 username: ****** password: ****** useUnicode: true characterEncoding: UTF-8 sql-script-encoding: UTF-8 jpa: show-sql: true 
  2. usando anotaciones directamente en las clases:

Si no especifica charSet = utf-8, el valor predeterminado será NINGUNO : en caso de que las tablas también tengan NINGUNO, obtendremos caracteres ilegibles o, según firebirdsql.org:


 3.2.4 How can I solve the error “Connection rejected: No connection character set specified” If no character set has been set, Jaybird 3.0 will reject the connection with an SQLNonTransientConnectionException with message “Connection rejected: No connection character set specified (property lc_ctype, encoding, charSet or localEncoding). Please specify a connection character set (eg property charSet=utf-8) or consult the Jaybird documentation for more information.” 

Conjunto mínimo de clases y archivos.


Para comenzar, index.html contiene un cuerpo vacío;
En la API se ejecuta Swagger, cuyas configuraciones de paquetes (infra) se colocan a un nivel con el resto del paquete del proyecto.



Añadir al proyecto:


  • modelo de paquete
    • clacc CModule - también conocido como Data (getter, setter para miembros, gracias a Lombok por el "código mono" mínimo), también conocido como Entity (la esencia de una tabla de base de datos);
  • repositorio de paquetes
    • la interfaz CModuleRepository extiende JpaRepository <CModule, String> (seleccionará datos de la base de datos), y por ahora no es necesario agregar nada (como Consulta );
  • servicios de paquetes;
    • clase CModuleService - también conocido como Servicio y @Transactional (readOnly = true) para trabajar con el repositorio;
  • paquete de recursos
    • clase CModulesResource - también conocido como @RestController, @RequestMapping ("/ modules") será responsable de acceder a esta dirección. El cuerpo de respuesta lo hará usted mismo (para nosotros se ve así)

Trabajaremos con la API RestController de todas las formas, se lo indicamos a Swagger:


 @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket documentation(){ return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .paths(PathSelectors.any()) .build(); } } 

Cree una clase que ejecute la aplicación Spring:


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

Se crean modelos, repositorios, solicitud para la tabla deseada (tengo módulos):
ahora puedes enfrentarte a @RestController


 @RestController @RequestMapping("/modules") @Api(tags = "Modules", description = "Modules API") public class CModulesResource { .... @GetMapping(value = "/{name}") @ApiOperation(value = "Find module",notes = "Find the module by Name") @ApiResponses(value = { @ApiResponse(code = 200,message = "Modules found"), @ApiResponse(code = 404,message = "Modules not found"), }) 

Api : el nombre de la clase con una descripción;
Nombre del método @ApiOperation con descripción;
@ApiResponses devolvió códigos API;
Código específico de @ApiResponse con una descripción;


Ejemplo (sí, todavía contiene la entidad principal, que no describo en el artículo)


Ahora puede probar la selección de datos utilizando la API REST.


Lista de literatura utilizada:


 1. https://www.baeldung.com 2. https://docs.spring.io 3. Spring in Action, 5th Edition 4. https://www.firebirdsql.org/file/documentation/drivers_documentation/java/faq.html#how-can-i-solve-the-error-connection-rejected-no-connection-character-set-specified 

githublink


Proyecto Github

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


All Articles