天天看點

《Spring 5 官方文檔》18. Web MVC 架構(十)

mvc java配置和mvc命名空間提供了類似的預設配置,可以覆寫<code>dispatcherservlet</code>預設配置。目标是使大多數應用程式不必建立相同的配置,并提供更進階别的構造,用于配置作為簡單起始點的spring mvc,并且需要很少或根本沒有底層配置的知識。

您可以根據自己的喜好選擇mvc java配置或mvc命名空間。另外,您将在下面進一步看到,使用mvc java配置,可以更容易地檢視底層配置,以及直接對建立的spring mvc bean進行細粒度的自定義。但是讓我們從一開始就開始。

要啟用mvc java配置,請将注釋添加<code>@enablewebmvc</code>到您的一個 <code>@configuration</code>類中:

要在xml中實作相同的使用<code>mvc:annotation-driven</code>dispatcherservlet上下文中的元素(如果您沒有定義dispatcherservlet上下文,則在根上下文中):

在上述寄存器一<code>requestmappinghandlermapping</code>,一個<code>requestmappinghandleradapter</code>,和<code>exceptionhandlerexceptionresolver</code>在支援帶注釋控制器方法的處理請求(等等)使用注釋諸如<code>@requestmapping</code>, <code>@exceptionhandler</code>和其他。

它還支援以下功能:

<code>httpmessageconverter</code>支援<code>@requestbody</code>方法參數和<code>@responsebody</code> 方法傳回值<code>@requestmapping</code>或<code>@exceptionhandler</code>方法。

這是由mvc設計的httpmessageconverters的完整清單:annotation-driven:

<code>bytearrayhttpmessageconverter</code> 轉換位元組數組。

<code>stringhttpmessageconverter</code> 轉換字元串。

<code>resourcehttpmessageconverter</code>轉換為/從 <code>org.springframework.core.io.resource</code>為所有媒體類型。

<code>sourcehttpmessageconverter</code>轉換到/從a <code>javax.xml.transform.source</code>。

<code>formhttpmessageconverter</code>将表單資料轉換為/從a轉換<code>multivaluemap&lt;string, string&gt;</code>。

<code>jaxb2rootelementhttpmessageconverter</code> 将java對象轉換為/從xml中添加 – 如果存在jaxb2,并且類别路徑中不存在jackson 2 xml擴充名。

<code>mappingjackson2httpmessageconverter</code> 轉換為/從json中添加,如果傑克遜2存在于類路徑。

<code>atomfeedhttpmessageconverter</code> 轉換atom feed – 如果羅馬存在于類路徑中則添加。

<code>rsschannelhttpmessageconverter</code> 轉換rss提要 – 如果羅馬存在于類路徑中,則會添加。

《Spring 5 官方文檔》18. Web MVC 架構(十)

如果在類路徑中檢測到它們,它也會自動注冊以下衆所周知的子產品:

要定制java中的預設配置,您隻需實作該 <code>webmvcconfigurer</code>接口,或者更有可能擴充該類<code>webmvcconfigureradapter</code> 并覆寫所需的方法:

預設情況下,已安裝格式化程式<code>number</code>和<code>date</code>類型,包括對<code>@numberformat</code>和<code>@datetimeformat</code>注釋的支援。如果joda時間存在于類路徑上,則還将完全支援joda time格式化庫。要注冊自定義格式化程式和轉換器,請覆寫該<code>addformatters</code>方法:

在mvc命名空間<code>&lt;mvc:annotation-driven&gt;</code>中,添加相同的預設值。注冊自定義格式化器和轉換器隻需提供一個<code>conversionservice</code>:

《Spring 5 官方文檔》18. Web MVC 架構(十)

預設情況下,通過在類路徑中檢測到一個bean驗證提供程式(如hibernate validator)時,可以在spring mvc中使用<code>@enablewebmvc</code>或<code>&lt;mvc:annotation-driven&gt;</code>自動注冊bean驗證支援<code>localvalidatorfactorybean</code>。

《Spring 5 官方文檔》18. Web MVC 架構(十)

或者,您可以配置自己的全局<code>validator</code>執行個體:

和xml:

要将全局和本地驗證結合起來,隻需添加一個或多個本地驗證器:

使用這個最小配置,任何時候遇到一個<code>@valid</code>或<code>@validated</code>方法參數,它将被配置的驗證器驗證。任何驗證違規将自動<code>bindingresult</code>作為方法參數可通路的錯誤公開,并且也可以在spring mvc html視圖中呈現。

您可以配置<code>handlerinterceptors</code>或<code>webrequestinterceptors</code>應用于所有傳入的請求或限制在特定的url路徑模式。

在java中注冊攔截器的示例:

而在xml中使用<code>&lt;mvc:interceptors&gt;</code>元素: