Spring Boot veb-ilovalar ishlab chiqishda juda qulay. Siz Tomcat, Jetty, Undertow yoki Netty bilan mustaqil HTTP-server yaratishingiz mumkin. Ko'pgina veb-ilovalar spring-boot-starter-web
modulidan foydalanib tezda ishlatadi. Shu bilan birga spring-boot-starter-webflux
moduli yordamida reaktiv veb-ilovalar ham yaratishingiz mumkin.
Agar siz servletlar asosida veb-ilovalar yaratmoqchi bo'lsangiz, Spring Boot'ning Spring MVC yoki Jersey uchun auto-konfiguratsiya imkoniyatlaridan foydalanishingiz mumkin.
"Spring Web MVC" Freymvorki
Spring Web MVC freymvorki (ko'pincha "Spring MVC" deb ataladi) to'liq funksional "model-view-controller" veb-freymvorkidir. Spring MVC kiruvchi HTTP so'rovlarini boshqarish uchun @Controller
yoki @RestController
annotatsiyali maxsus beans yaratishga imkon beradi. Kontrollerdagi metodlar HTTP protokoli bilan @RequestMapping
annotatsiyalar orqali moslanadi.
Quyidagi kodda JSON formatidagi ma'lumotlar bilan ishlovchi odatiy @RestController
annotatsiyasi ko'rsatilgan:
// RestController @RequestMapping("/users") public class MyRestController { private final UserRepository userRepository; private final CustomerRepository customerRepository; public MyRestController(UserRepository userRepository, CustomerRepository customerRepository) { this.userRepository = userRepository; this.customerRepository = customerRepository; } @GetMapping("/{userId}") public User getUser(@PathVariable Long userId) { return this.userRepository.findById(userId).get(); } @GetMapping("/{userId}/customers") public List<Customer> getUserCustomers(@PathVariable Long userId) { return this.userRepository.findById(userId).map(this.customerRepository::findByUser).get(); } @DeleteMapping("/{userId}") public void deleteUser(@PathVariable Long userId) { this.userRepository.deleteById(userId); } }
// RestController @RequestMapping("/users") class MyRestController(private val userRepository: UserRepository, private val customerRepository: CustomerRepository) { @GetMapping("/{userId}") fun getUser(@PathVariable userId: Long): User { return userRepository.findById(userId).get() } @GetMapping("/{userId}/customers") fun getUserCustomers(@PathVariable userId: Long): List<Customer> { return userRepository.findById(userId).map(customerRepository::findByUser).get() } @DeleteMapping("/{userId}") fun deleteUser(@PathVariable userId: Long) { userRepository.deleteById(userId) } }
"WebMvc.fn" funksional varianti konfiguratsiyani so'rovlar bilan ishlashdan ajratadi, quyidagi misol kabi:
// Configuration proxyBeanMethods public class MyRoutingConfiguration { private static final RequestPredicate ACCEPT_JSON = accept(MediaType.APPLICATION_JSON); @Bean public RouterFunction<ServerResponse> routerFunction(MyUserHandler userHandler) { return route() .GET("/{user}", ACCEPT_JSON, userHandler::getUser) .GET("/{user}/customers", ACCEPT_JSON, userHandler::getUserCustomers) .DELETE("/{user}", ACCEPT_JSON, userHandler::deleteUser) .build(); } }
// Configuration proxyBeanMethods class MyRoutingConfiguration { @Bean fun routerFunction(userHandler: MyUserHandler): RouterFunction<ServerResponse> { return RouterFunctions.route() .GET("/{user}", ACCEPT_JSON, userHandler::getUser) .GET("/{user}/customers", ACCEPT_JSON, userHandler::getUserCustomers) .DELETE("/{user}", ACCEPT_JSON, userHandler::deleteUser) .build() } companion object { private val ACCEPT_JSON = accept(MediaType.APPLICATION_JSON) } }
// @Component public class MyUserHandler { public ServerResponse getUser(ServerRequest request) { ... return ServerResponse.ok().build(); } public ServerResponse getUserCustomers(ServerRequest request) { ... return ServerResponse.ok().build(); } public ServerResponse deleteUser(ServerRequest request) { ... return ServerResponse.ok().build(); } }
// @Component class MyUserHandler { fun getUser(request: ServerRequest?): ServerResponse { return ServerResponse.ok().build() } fun getUserCustomers(request: ServerRequest?): ServerResponse { return ServerResponse.ok().build() } fun deleteUser(request: ServerRequest?): ServerResponse { return ServerResponse.ok().build() } }
RouterFunction
beans yaratishingiz mumkin. Agar ular navbati bilan ishlatilishi kerak bo'lsa, beanslarni tartiblash mumkin.
Spring MVC Auto-konfiguratsiyasi
Spring Boot, ko'pgina ilovalar uchun mukammal ishlaydigan, Spring MVC uchun auto-konfiguratsiyani ta'minlaydi.
Auto-konfiguratsiya Spring standartlariga qo'shimcha ravishda quyidagi funksiyalarni qo'shadi:
-
ContentNegotiatingViewResolver
vaBeanNameViewResolver
beans qo'shish. -
Statik resurslarni qo'llab-quvvatlash, WebJars'ni qo'llab-quvvatlashni o'z ichiga oladi.
-
Converter
,GenericConverter
vaFormatter
beans'larning avtomatik ro'yxatdan o'tishi. -
HttpMessageConverters
ni qo'llab-quvvatlash. -
MessageCodesResolver
ni avtomatik ro'yxatdan o'tishi. -
Statik
index.html
ni qo'llab-quvvatlash. -
ConfigurableWebBindingInitializer
beans'ning avtomatik ishlatilishi.
Agar ushbu Spring Boot MVC sozlamalarini saqlab qolish va boshqa MVC sozlamalarini (interceptors, formatters, view controllers va boshqa funksiyalarni) qo'shmoqchi bo'lsangiz, @Configuration
annotatsiyali o'zingizning WebMvcConfigurer
turidagi sinfingizni qo'shishingiz mumkin, lekin resmi @EnableWebMvc
annotatsiyasiz.
Agar RequestMappingHandlerMapping
, RequestMappingHandlerAdapter
yoki ExceptionHandlerExceptionResolver
ning maxsus nusxalarini berish kerak bo'lsa va Spring Boot MVC sozlamalarini saqlab qolmoqchi bo'lsangiz, WebMvcRegistrations
turidagi beanni e'lon qilishingiz va ushbu komponentlarning maxsus nusxalarini taqdim etishingiz mumkin.
Agar Spring MVC ishini to'liq nazorat qilishni istasangiz, o'z @Configuration
ni @EnableWebMvc
annotatsiyali qo'shishingiz yoki @Configuration
annotatsiyali o'z DelegatingWebMvcConfiguration
sinfingizni qo'shishingiz mumkin, bu @EnableWebMvc
annotatsiyasining Javadoc'da ko'rsatilganidek.
Spring MVC ConversionService
ning qiymatlarni application.properties
yoki application.yaml
faylingizdan o'zgartirish uchun foydalanadigan xizmatdan farqli. Bu shuni anglatadiki, Period
, Duration
va DataSize
konvertorlari mavjud bo'lmaydi va @DurationUnit
va @DataSizeUnit
annotatsiyalari e'tiborga olinmaydi.
Agar Spring MVC tomonidan foydalaniladigan ConversionService
ni sozlamalarga moslashtirish kerak bo'lsa, WebMvcConfigurer
ni addFormatters
usuli bilan taqdim etishingiz mumkin. Ushbu usuldan siz har qanday yoqtirilgan konvertorni ro'yxatdan o'tkazishingiz yoki ApplicationConversionService
uchun mavjud bo'lgan statik metodlarga vakolat berishingiz mumkin.
HttpMessageConverters
Spring MVC HTTP so'rov va javoblarni o'zgartirish uchun HttpMessageConverter
interfeysidan foydalanadi. Dastlabki sozlamalar "out of the box" yetarli. Masalan, ob'ektlar avtomatik ravishda JSON formatiga (Jackson kutubxonasi yordamida) yoki XMLga (Jackson XML kengaytmasi mavjud bo'lsa, aks holda JAXB yordamida) o'zgartirilishi mumkin. Dastlabki sozlamalar bo'yicha stringlar UTF-8
formatida kodlanadi.
Agar konvertorlarni qo'shmoqchi yoki sozlamoqchi bo'lsangiz, Spring Boot HttpMessageConverters
sinfidan foydalanishingiz mumkin, quyidagi misolda ko'rsatilganidek:
// Configuration proxyBeanMethods public class MyHttpMessageConvertersConfiguration { @Bean public HttpMessageConverters customConverters() { HttpMessageConverter<?> additional = new AdditionalHttpMessageConverter(); HttpMessageConverter<?> another = new AnotherHttpMessageConverter(); return new HttpMessageConverters(additional, another); } }
// Configuration proxyBeanMethods class MyHttpMessageConvertersConfiguration { @Bean fun customConverters(): HttpMessageConverters { val additional: HttpMessageConverter<*> = AdditionalHttpMessageConverter() val another: HttpMessageConverter<*> = AnotherHttpMessageConverter() return HttpMessageConverters(additional, another) } }
Ixtiyoriy HttpMessageConverter
konteksda mavjud bo'lsa, u konvertorlar ro'yxatiga qo'shiladi. Shu tarzda siz dastlabki sozlamalarni o'zgartirishingiz ham mumkin.
MessageCodesResolver
Spring MVC xato xabarlarini yaratish uchun strategiyani taqdim etadi: MessageCodesResolver
. Agar spring.mvc.message-codes-resolver-format
xususiyati PREFIX_ERROR_CODE
yoki POSTFIX_ERROR_CODE
o'rnatilgan bo'lsa, Spring Boot uni siz uchun yaratadi.
GO TO FULL VERSION