Spring + Firebird + REST. Bagian 1 Konfigurasi Proyek

Alih-alih bergabung


Jika Anda membongkar sesuatu, cobalah untuk menggambarkannya dalam bahasa yang jelas dan temukan seseorang yang akan membaca dan membuat komentar (diucapkan ulang R. Feynman, tapi ya saya lakukan).
Semua komentar, bahkan kejam dengan gaya "Ya, ini ~ putih ~~ orang memungkinkan dirinya sendiri "selamat datang.


Tujuan


Aplikasi - menampilkan laporan tentang kemajuan produk (skala), jika mungkin, dengan distribusi data ini melalui jaringan dalam perusahaan (untuk fungsionalitas);
Pribadi - sedikit pemahaman tentang teknologi pegas


Teknologi


  • Web musim semi
  • Spring jpa
  • Lombok
    • Timelaf
  • SpringFox Swagger (Saya akan menguji sisanya)
  • jaybird-jdk17, versi 3.0.5
  • Maven

Motivasi luka pegas + burung api


Baru-baru ini, tempat klien pertama di Linux Mint untuk operator Ovsezavod dibuat dan tampilan laporan dari Wine tidak selalu memadai. (semuanya bekerja dengan baik - Visualisasi Qt - SCADA, arsip Java SE).


Beberapa penggaruk yang harus diinjak


  1. dependensi jackson dari versi yang berbeda (tetap),
  2. firebird tidak mengatur jenis penyandian mengarah ke NONE default,

Tautan ke git di akhir publikasi.


Jackson dan semuanya


Komponen yang berbeda diseret pada jackson dari versi yang berbeda, karena tidak menyenangkan, perlu untuk memperbaikinya.
Diungkap oleh tim


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 

Kami perbaiki di 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> 

Dikoreksi, kira-kira. ternyata. Jika Anda menggunakan IDEA, maka lebih mudah untuk melihat Perpustakaan Eksternal . Bahwa ada semua dependensi dan mereka adalah versi yang tepat.


Struktur aplikasi umum


Saya tidak terbiasa dengan pengujian pegas boot aplikasi, jadi saya akan melakukannya tanpa tes
("Ya, warna kulit itu memungkinkan sendiri").


Konfigurasi aplikasi


Karena saya adalah pengembang berpengalaman, dan karena itu tidak terbiasa dengan metode yang ditetapkan, saya akan melakukan:


  1. di application.yml (saat mengatur koneksi database)
     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. menggunakan anotasi langsung di kelas:

Jika Anda tidak menentukan charSet = utf-8, maka defaultnya adalah NONE : Jika tabel juga memiliki NONE, kami akan mendapatkan karakter yang tidak dapat dibaca atau, menurut 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.” 

Set minimum kelas dan file


Untuk memulai, index.html berisi isi kosong;
Berjalan di API adalah Swagger, yang konfigurasi paketnya (infra) ditempatkan pada level yang sama dengan paket proyek lainnya.



Tambahkan ke proyek:


  • model paket
    • clacc CModule - alias Data (pengambil, penyetel untuk anggota, terima kasih ke Lombok untuk "kode monyet" minimum), alias Entitas (esensi dari tabel database);
  • repositori paket
    • antarmuka CModuleRepository meluas JpaRepository <CModule, String> (ini akan memilih data dari database), dan untuk saat ini tidak ada yang perlu ditambahkan ke dalamnya (seperti Query );
  • layanan paket;
    • kelas CModuleService - alias Layanan dan @Transaksional (readOnly = true) untuk bekerja dengan repositori;
  • sumber daya paket
    • kelas CModulesResource - alias @RestController, @RequestMapping ("/ modules") akan bertanggung jawab untuk mengakses alamat ini. Badan respons akan melakukannya sendiri (bagi kami terlihat seperti ini)

Kami akan bekerja dengan API RestController dengan segala cara, kami menunjukkan ini ke 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(); } } 

Buat kelas yang menjalankan Aplikasi Musim Semi:


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

Model, repositori, permintaan dibuat untuk tabel yang diinginkan (saya punya modul):
sekarang Anda dapat menggunakan @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 - nama kelas dengan deskripsi;
@ApiOperation nama metode dengan deskripsi;
@ApiResponses mengembalikan kode API;
@ApiResponse kode khusus dengan deskripsi;


Contoh (ya, masih berisi entitas utama, yang tidak saya jelaskan di artikel)


Sekarang Anda dapat menguji pemilihan data menggunakan API REST.


Daftar literatur yang digunakan:


 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


Proyek Github

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


All Articles