Spring Boot開發web應用

Spring Boot非常適合web應用的開發, 你可以非常容易的創建一個內嵌tomcat,jetty,undertow,netty等HTTP服務的應用,可以通過spring-boot-starter-web實現快速構建,也可以通過spring-boot-starter-webflux模塊快速構建響應式web服務。

Spring Web MVC框架

Spring Web MVC框架是一個富“model view controller”Web框架,Spring MVC讓你能夠創建一個由@Controller或者@RestController註解的類來處理HTTP請求。Controller中的方法使用@RequestMapping註解,如下是一個示例,用於對JSON類型數據請求處理:

@RestController
@RequestMapping(value="/users")
public class MyRestController{

    @RequestMapping(value="/{user}",method=RequestMethod.GET)
    public User getUser(@PathVariable Long user){

    }

    @RequestMapping(value="/{user}/customers",method=RequestMethod.GET)
    List<Customer> getUserCustomers(@PathVariable Long user){
    }

    @RequestMapping(value="/{user}",method=RequestMethod.GET)
    public User deleteUser(@PathVariable Long user){}
}

Spring MVC 自動配置

Spring Boot給Spring MVC提供給的自動配置對絕大多數應用來說都工作的很好。

這些自動配置在spring默認之上添加了如下功能:

  • 包含ContentNegotiatingViewResolver和BeanNameViewResolver實體。
  • 支持提供靜態資源服務,包括支持WebJars。
  • Converter,GenericConverter,Formatter的自動註冊。
  • 支持HttpMessageConverters.
  • MessageCodeResolver的自動註冊。
  • 靜態index.html支持
  • 訂製Favicon支持
  • ConfigurableWebBindingInitializer的自動使用。

如果你既想要使用Spring Boot MVC的自動配置功能,還想要添加其他的MVC配置(如interceptors,formatters,view controllers等),那麼你可以添加自己的@Configuration類(WebMvcConfigurer類型的),但是不能使用@EnableWebMvc註解。如果你希望提供RequestMappingHandlerMapping,RequetsMappingHandlerAdapter或者ExceptionHandlerExceptionResolver的訂製實例,你可以通過聲明一個WebMvcRegistrationSAdapter類型實例的組件。

如果你想要完全控制Spring MVC,那麼在你的@Configuration註解的配置類上添加@EnableWebMvc註解。

HttpMessageConverters

Spring MVC使用HttpMessageConverters接口轉換HTTP請求和響應。合理的默認值都是內嵌的並且開箱可用的,例如對象可以自動轉換爲JSON(使用Jackson庫)或者XML(如果可用就使用Jackson XML擴展,否則使用JAXB)。字符串默認使用UTF-8使用。

如果想要添加或者訂製轉換器,你可以使用Spring Boot的HttpMessageConverters類:

import org.Springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.*;
import org.springframework.http.converter.*;

@Configuration
public class MyConfiguration{

    @Bean
    public HttpMessageConverters customConverters(){
        HttpMessageConverter<?> additional = ...;
        HttpMessageConverter<?> another = ...;
        return new HttpMessageConverters(additional,another);
    }
}

訂製JSON序列化器和反序列化器(Serializers和Deserializes)

如果你在使用Jackson序列化和反序列化JSON數據,你可能想要書寫你自己的JsonSerializer和JsonDeserializer。

在Spring Boot項目中,你可以@JsonComponent直接註解在JsonSerializer或者JsonDeserializer的實現類上,也可以註解在一個包含有實現JsonSerializer和JsonDeserializer接口的內部類的類上,如下:

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import org.springframework.boot.jackson.*;

@JsonComponent
public class Example{
    public static class Serializer extends JsonSerializer<SomeObject>{}

    public static class Deserializer extends JsonDeserializer<SomeObject>{}
}

所有ApplicationContext中使用@JsonComponent註解的beans都會自動使用Jackson註冊,且使用此註解的的類可以被做爲組件直接被@ComponentScan掃描到(掃描路徑配置正確)。

MessageCodesResolver

Spring MVC提供一種生成錯誤編碼的策略用以渲染所綁定錯誤的錯誤消息:MessageCodesResolver。SpringBoot同樣會創建這樣的實例如果你設置了spring.mvc.message-codes-resolver.format屬性值爲PREFIX_ERROR_CODE或者POSTFIX_ERROR_CODE。詳細參看DefaultMessageCodesResolver.Format。

靜態內容

默認情況下,Spring Boot爲classpath或者ServletContext的根目錄下的叫作/static或者/resources或者/META-INF/resources目錄下的靜態內容提供服務,使用的是Spring MVC的ResourceHttpRequestHandler,如果你想想在改變此默認行爲,需要添加你自己的SebMvcConfigurer並且覆蓋其addResourceHandlers方法。

在一個獨立的web應用中,來自容器的默認servlet也是處於啓用狀態的,並且扮演一個回調(fallback)角色,來自於ServletContext根目錄的靜態內容spring不處理靜態時則由其處理。

默認情況下,資源文件放在項目/**下,但是可以通過spring.mvc.static-path-pattern調整,如可以重定位所有的資源文件到/resources/**下如下:

spring.mvc.static-path-pattern=/resources/**

也可能通過spring.resources.static-locations訂製自己的資源位置。當然如果這樣做了,welcome頁面也將會從此訂製的默認位置查找。

發佈了42 篇原創文章 · 獲贊 10 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章