Printemps + Firebird + REST. Partie 1 Configuration du projet

Au lieu de rejoindre


Si vous analysez quelque chose, essayez de le décrire dans un langage clair et trouvez quelqu'un qui lira et fera des commentaires (reformulé R. Feynman, mais oui je l'ai fait).
Tous les commentaires, même vicieux dans le style de "Oui, que cela ~ blanc ~~ personnes se permet "bienvenue.


Buts


Applications - affichage des rapports sur l'avancement du produit (échelles), si possible, avec la distribution de ces données sur le réseau au sein de l'entreprise (pour la fonctionnalité);
Personnel - un peu de compréhension de la technologie du ressort


La technologie


  • Web de printemps
  • Printemps jpa
  • Lombok
    • Thymeleaf
  • SpringFox Swagger (je vais tester le reste)
  • jaybird-jdk17, version 3.0.5
  • Maven

Motivation entaille printemps + oiseau de feu


Récemment, la première place client sous Linux Mint pour l'opérateur Ovsezavod a été réalisée et l'affichage des rapports de Wine n'était pas toujours adéquat. (tout le reste fonctionne bien - visualisation Qt - SCADA, archives Java SE).


Un râteau sur lequel il fallait marcher


  1. dépendances jackson de différentes versions (fixe),
  2. Firebird non défini le type de codage conduit à défaut (s) AUCUN,

Lien vers git à la fin de la publication.


Jackson et tous tous tous


Différents composants traînés sur jackson de différentes versions, comme c'est désagréable, il faut y remédier.
Révélé par l'équipe


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 

Nous réparons 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> 

Corrigé, env. il s'est avéré. Si vous utilisez IDEA, il est encore plus facile de voir les bibliothèques externes . Qu'il y a toutes les dépendances et que ce sont les bonnes versions.


Structure générale d'application


Je ne suis pas familier avec les tests Spring Boot de l'application, donc je le ferai sans tests
("Oui, cette couleur de peau se permet").


Configuration d'application


Comme je suis un développeur chevronné, et donc pas familier avec les méthodes établies, je ferai:


  1. dans application.yml (lors de la configuration d'une connexion à la base de données)
     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. en utilisant des annotations directement dans les classes:

Si vous ne spécifiez pas charSet = utf-8, la valeur par défaut sera NONE : dans le cas où les tables ont également NONE, nous obtiendrons des caractères illisibles ou, selon 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.” 

Ensemble minimal de classes et de fichiers


Pour commencer, index.html contient un corps vide;
L'exécution de l'API est Swagger, dont les configurations (infra) de package sont placées au niveau du reste du package de projet.



Ajouter au projet:


  • modèle de package
    • clacc CModule - alias Data (getter, setter pour les membres, merci à Lombok pour le minimum "code monkey"), alias Entity (l'essence d'une table de base de données);
  • référentiel de packages
    • l'interface CModuleRepository étend JpaRepository <CModule, String> (il sélectionnera les données de la base de données), et pour l'instant rien ne doit y être ajouté (comme Query );
  • services de package;
    • classe CModuleService - aka Service et @Transactional (readOnly = true) pour travailler avec le référentiel;
  • ressources de package
    • classe CModulesResource - alias @RestController, @RequestMapping ("/ modules") sera responsable de l'accès à cette adresse. Le corps de réponse le fera vous-même (pour nous, cela ressemble à ceci)

Nous travaillerons avec l'API RestController de toutes les manières, nous l'indiquons à 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(); } } 

Créez une classe exécutant Spring Application:


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

Des modèles, des référentiels, des requêtes sont créés pour la table souhaitée (j'ai des modules):
vous pouvez maintenant prendre @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 - le nom de la classe avec une description;
@ApiOperation nom de la méthode avec description;
@ApiResponses a renvoyé des codes API;
@ApiResponse code spécifique avec une description;


Exemple (oui, il contient toujours l'entité principale, que je ne décris pas dans l'article)


Vous pouvez maintenant tester la sélection des données à l'aide de l'API REST.


Liste de la littérature utilisée:


 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


Projet Github

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


All Articles