рд╕реНрдкреНрд░рд┐рдВрдЧ + рдлрд╛рдпрд░рдмрд░реНрдб + RESTред рднрд╛рдЧ 1 рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдиреНрдпрд╛рд╕

рдЬреНрд╡рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп


рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдбрд┐рд╕рд╛рдЗрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдХреЛрдИ рдРрд╕рд╛ рд╡реНрдпрдХреНрддрд┐ рдЦреЛрдЬреЗрдВ рдЬреЛ рдХрдореЗрдВрдЯ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдЧрд╛ (рдЖрд░ред рдлреЗрдирдореИрди, рд▓реЗрдХрд┐рди рд╣рд╛рдВ рдореИрдВрдиреЗ рдХрд┐рдпрд╛)ред
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, "рд╣рд╛рдБ, рдХрд┐ рдЗрд╕ рд╢реИрд▓реА рдореЗрдВ рднреА рд╢рд╛рддрд┐рд░ ~ рд╕рдлрд╝реЗрдж ~~ рд▓реЛрдЧ рдЦреБрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реИ тАЭред


рд▓рдХреНрд╖реНрдпреЛрдВ


рдЕрдиреБрдкреНрд░рдпреЛрдЧ - рдЙрддреНрдкрд╛рдж рдХреА рдкреНрд░рдЧрддрд┐ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ (рддрд░рд╛рдЬреВ), рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЙрджреНрдпрдо рдХреЗ рднреАрддрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЗрди рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде (рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП);
рд╡реНрдпрдХреНрддрд┐рдЧрдд - рд╡рд╕рдВрдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рдереЛрдбрд╝реА рд╕рдордЭ


рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ


  • рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм
  • рд╡рд╕рдВрдд рдЬрд╛рдкрд╛
  • рд▓рдВрдмреЛрдХ
    • Thymeleaf
  • рд╕реНрдкреНрд░рд┐рдВрдЧрдлреЙрдХреНрд╕ рд╕реНрд╡реИрдЧрд░ (рдореИрдВ рдЗрд╕ рдкрд░ рдЖрд░рд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛)
  • jaybird-jdk17, рд╕рдВрд╕реНрдХрд░рдг 3.0.5
  • Maven

рдкреНрд░реЗрд░рдгрд╛ рдЧрд╢ тАЛтАЛрд╡рд╕рдВрдд + рдлрд╛рдпрд░рдмрд░реНрдб


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдУрд╡реЗрд╕реНрдЬрд╝рд╛рд╡реЛрдб рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдЯрдХрд╕рд╛рд▓ рдХреЗ рддрд╣рдд рдкрд╣рд▓рд╛ рдЧреНрд░рд╛рд╣рдХ рд╕реНрдерд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡рд╛рдЗрди рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред (рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдХреНрдпреВрдЯреА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди - рд╕реНрдХрд╛рдбрд╛, рдЬрд╛рд╡рд╛ рдПрд╕рдИ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░)ред


рдХреБрдЫ рд░реЗрдХ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдерд╛


  1. рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЬреИрдХрд╕рди рдирд┐рд░реНрднрд░рддрд╛ (рдирд┐рд╢реНрдЪрд┐рдд),
  2. рдлрд╛рдпрд░рдмрд░реНрдб рд╕реЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдиреЛрдВ) рдХреА рдУрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ,

рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЧрд┐рдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред


рдЬреИрдХреНрд╕рди рдФрд░ рд╕рдм рд╕рдм


рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдЬреИрдХрд╕рди рдкрд░ рдЦреАрдВрдЪреЗ рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкреНрд░рд┐рдп рд╣реИ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЯреАрдо рдиреЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛


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 

рд╣рдо рдкреЛрдо рдореЗрдВ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред


  <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> 

рдареАрдХ рдХрд┐рдпрд╛, рд▓рдЧрднрдЧред рдпрд╣ рдирд┐рдХрд▓рд╛ред рдпрджрд┐ рдЖрдк IDEA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреЗрдЦрдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред рдХрд┐ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред


рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд░рдЪрдирд╛


рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрд░реВрдВрдЧрд╛
("рд╣рд╛рдБ, рд╡рд╣ # рддреНрд╡рдЪрд╛ рдХрд╛ рд░рдВрдЧ рд╕реНрд╡рдпрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ")ред


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдореИрдВ рдХрд░реВрдВрдЧрд╛:


  1. application.yml рдореЗрдВ (рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп)
     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. рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реАрдзреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

рдпрджрд┐ рдЖрдк charSet = utf-8 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ NONE рд╣реЛрдЧрд╛ : рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рднреА рдХреЛрдИ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдардиреАрдп рд╡рд░реНрдг рдорд┐рд▓реЗрдВрдЧреЗ рдпрд╛, 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.тАЭ 

рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ


рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, index.html рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдХрд╛рдп рд╣реИ;
рдПрдкреАрдЖрдИ рдореЗрдВ рд░рдирд┐рдВрдЧ рд╕реНрд╡реИрдЧрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреИрдХреЗрдЬ (рдЗрдиреНрдлреНрд░рд╛) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрд╛рдХреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╕рдордореВрд▓реНрдп рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:


  • рдкреИрдХреЗрдЬ рдореЙрдбрд▓
    • clacc CModule - рдЙрд░реНрдл рдбреЗрдЯрд╛ (рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд░, рдиреНрдпреВрдирддрдо "рдХреЛрдб рдмрдВрджрд░" рдХреЗ рд▓рд┐рдП рд▓реЛрдореНрдмреЛрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рдЙрд░реНрдл рдПрдВрдЯрд┐рдЯреА (рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╕рд╛рд░);
  • рдкреИрдХреЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
    • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ CModuleRepository JpaRepository <CModule, String> (рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ рдХреНрд╡реЗрд░реА );
  • рдкреИрдХреЗрдЬ рд╕реЗрд╡рд╛рдПрдВ;
    • рд╡рд░реНрдЧ CModuleService - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд░реНрдл рд╕реЗрд╡рд╛ рдФрд░ @Transactional (readOnly = true);
  • рдкреИрдХреЗрдЬ рд╕рдВрд╕рд╛рдзрди
    • рд╡рд░реНрдЧ CModulesResource - aka @RestController, @RequestMapping ("/ рдореЙрдбреНрдпреВрд▓") рдЗрд╕ рдкрддреЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдмреЙрдбреА рдЦреБрдж рдХрд░реЗрдЧреА (рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)

рд╣рдо рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ рд░реЗрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд╣рдо рд╕реНрд╡реИрдЧрд░ рдХреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:


 @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(); } } 

рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ:


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

рдореЙрдбрд▓, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЕрдиреБрд░реЛрдз рд╡рд╛рдВрдЫрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВ (рдореЗрд░реЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ):
рдЕрдм рдЖрдк @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"), }) 

рдЖрдкреА - рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо;
рд╡рд░реНрдгрди рдХреЗ рд╕рд╛рде @ApiOperation рдкрджреНрдзрддрд┐ рдХрд╛ рдирд╛рдо;
@ApiResponses рдиреЗ API рдХреЛрдб рд▓реМрдЯрд╛рдП;
рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде @ApiResponse рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб;


рдЙрджрд╛рд╣рд░рдг (рд╣рд╛рдВ, рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдореБрдЦреНрдп рдЗрдХрд╛рдИ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ)


рдЕрдм рдЖрдк REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЪрдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА:


 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


рдЧрд┐рдердм рдкрд░рд┐рдпреЛрдЬрдирд╛

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


All Articles