1. 程式人生 > >Spring4.x官方參考文件中文版——第21章 Web MVC框架(32)

Spring4.x官方參考文件中文版——第21章 Web MVC框架(32)

21.16.2 對提供的配置進行定製

為了在Java中定製預設的配置,你只需實現WebMvcConfigurer介面,或者繼承WebMvcConfigurerAdapter並覆寫你需要的方法:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{
 
    // 覆寫配置的方法...
 
}

       為了定製<mvc:annotation-driven/>的預設配置,請確認它支援哪種attribute屬性和子元素。你可以參考Spring MVC XML schema,或者使用你IDE裡的程式碼自動補全功能來看看哪些attribute和子元素是可以用的。

21.16.3 轉換與格式化

預設情況下,Date和Number型別的格式化是已經配置好的,包括支援@NumberFormat和@dateTimeFormat註解。如果Joda Time在類路徑下被發現,這個型別也能被格式化。你可以通過覆寫addFormatters方法來註冊自定義的formatter(格式化器)和converters(轉換器)。

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
 
    @Override
    public void addFormatters(FormatterRegistry registry) {
        // 新增 formatters 和/或 converters
    }
 
}

        在MVC namespace中,當有<mvc:annotation-driven>時,相同的預設配置就會被啟用了。如需自定義formatter和converter,只需新增ConversionService:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven conversion-service="conversionService"/>

    <bean id="conversionService"
            class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="org.example.MyConverter"/>
            </set>
        </property>
        <property name="formatters">
            <set>
                <bean class="org.example.MyFormatter"/>
                <bean class="org.example.MyAnnotationFormatterFactory"/>
            </set>
        </property>
        <property name="formatterRegistrars">
            <set>
                <bean class="org.example.MyFormatterRegistrar"/>
            </set>
        </property>
    </bean>

</beans>

提示:

   使用FormatterRegistrars時,可參考”8.6.4 FormatterRegistrar SPI”。

21.16.4 驗證

Spring提供了一個驗證器介面,他能夠適用於整個應用的任意層面上進行驗證。在Spring MVC中,你可以把它作為一個全域性Validator例項來進行配置,

可以在碰到任何@Valid 或@Validated的controller方法時使用它,並且/或者作為一個類中的Validator,通過@InitBinder方法來使用。全域性或者本地的validator例項可以混合使用。

        Spring同樣可以通過LocalValidatorFactoryBean來支援JSR-303/JSR-349的bean驗證,LocalValidatorFactoryBean使Spring的org.springframework.validation.Validator介面適應於bean的驗證javax.validation.validator規範。這個類可以作為全域性驗證器來被注入到Spring MVC中,這將會在後文進行說明。

        預設情況下,使用@EnableWebMvc或<mvc:annotaion_driven>會自動在Spring MVC中支援bean的驗證,當諸如Hibernate Validator之類的驗證器在類路徑下被檢測到的時候,會通過LocalValidatorFactoryBean來進行bean的驗證。

提示:

        有時,在controller或其他類中注入LocalValidatorFactoryBean會比較方便。最簡單的方法是,宣告自己的@Bean,並且以@Primary標註它,用來避免與MVC Java config中的那個類似的起衝突。如果你更喜歡用MVC Java config中的那個,你需要在WebMvcConfigurationSupport中覆寫mvcValidator方法,並顯式地宣告方法會返回LocalValidatorFactory而不是Validator。關於對這些已提供的配置進行切換擴充套件,請參考”21.16.13 使用MVC Java Config進行深度定製”。

        另一方面,你可以配置你自己的全域性Validator例項:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
 
    @Override
    public Validator getValidator(); {
        // return "global" validator
    }
 
}

        在XML中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <mvc:annotation-driven validator="globalValidator"/>
 
</beans>

        為了把本地的驗證與全域性的驗證結合起來,只需新增一個或多個驗證器:

@Controller
public class MyController {
 
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FooValidator());
    }
 
}

        使用這個最小化的配置,在任何時候,只要碰到了帶@Valid或@Validated的方法入參,就會被已經配置好的驗證器進行驗證。任何違背驗證規則的會在BindingResult自動地作為錯誤暴露出來,並且可以作為方法的入參被訪問到,並且也可以在Spring MVC HTML的檢視中進行渲染。

相關推薦

Spring4.x官方參考中文版——21 Web MVC框架(32)

21.16.2 對提供的配置進行定製為了在Java中定製預設的配置,你只需實現WebMvcConfigurer介面,或者繼承WebMvcConfigurerAdapter並覆寫你需要的方法:@Configuration @EnableWebMvc public class W

Spring4.x官方參考中文版——21 Web MVC框架(16)

21.5.2 串聯多個ViewResolver Spring支援多個檢視解析器。因此,你能夠串聯多個解析器,也可以在特定情況下覆寫特定的檢視。你可以通過在你的應用中的context中新增多個解析器來把這些檢視解析器串聯起來。此外,如果有必要的話,還可以設定order屬性來指

Spring4.x官方參考中文版——21 Web MVC框架(20)

21.7 URI的組建 Spring MVC提供了一種機制,可以使用UriComponentsBuilder和UriComponents來組建並編碼URI。        如下例所示,你能擴充套件並編碼一個URI模板的字串: UriComponents uriCompone

Spring4.x官方參考中文版——21 Web MVC框架(22)

21.9 主題(theme)的使用 21.9.1 主題概況 你能夠使用Spring Web MVC框架在你的應用中設定全域性生效的主題,從而提升使用者的體驗。主題是那些影響著應用裡視覺樣式的靜態資源(一般是表的樣式和影象)的集合。 21.9.2 主題的定義 為了在你的web

Spring4.x官方參考中文版——21 Web MVC框架(19)

21.6 使用flash attribute(flash屬性) Flash屬性為一個請求提供了儲存屬性的方式,這些儲存的請求可以在另一個請求中使用。當重定向時,比如在Post/Redirect/Get模式下的時候,這種需求是很普遍的。flash屬性會在重定向之前暫存(一般是

Spring 4.x官方參考中文版——21 Web MVC框架(11)

自定義WebDataBinder的初始化 為了在Spring的WebDataBinder裡,使用PropertyEditors來自定義請求引數的繫結,你能在你的controller中,使用@InitBinder方法,或在@ControllerAdvice註解了的類中使用@I

Spring 4.x官方參考中文版——21 Web MVC框架(10)

使用@SessionAttributes來儲存請求中HTTP session的model attribute(模型屬性)         類級別的@SessionAttributes聲明瞭session attributes會被特定的handler處理器所使用。它會把儲存

Spring 4.x官方參考中文版——21 Web MVC框架(8)

支援的方法返回引數型別        以下是支援的方法返回引數型別:ModelAndView : 這個物件由包括了指令物件的model模型,和帶@ModelAttribute註解的資料訪問方法的返回結果組成。Model : 模型物件,由通過RequestToViewName

Spring 4.x官方參考中文版——21 Web MVC框架(15)

21.5 檢視的解析 所有web應用的MVC框架都提供了指定檢視地址的方法。Spring提供了檢視解析器,這可以讓你在瀏覽器裡渲染model(模型),而不必與其他檢視技術繫結。不止如此,Spring還允許你使用如:JSP,Velocity模板和XSLT檢視等技術,需要了解更

Spring 4.x官方參考中文版——21 Web MVC框架(4)

21.3實現Controller控制器 Controller控制器可以為你在一個服務介面中定義好的應用行為提供訪問權。controller控制器可以理解使用者的輸入行為,並且把其轉化為一個可以通過檢視呈現給使用者的model模型。Spring是以一種十分抽象的方式來實現的c

《Python3.6官方》– 12 虛擬環境和包

原文連結   譯者:Carvendy 12. 虛擬環境和包 12.1 介紹   Python應用程式總會使用一些包和模組,它們離不開標準庫。應用程式需要指定標準庫的版本,因為應用程式可能需要避免一個已經修復的bug,或者是應用程式重寫了具體版本標準庫的介面的實現。   這意味著也許不可能需要給

《Python3.6官方》–

作業系統介面 os 模組提供一系列與作業系統進行互動的函式。 import os os.getcwd()      # 返回當前工作目錄 os.chdir('/server/accesslogs')   #  修改當前工作目錄 os.system('mkdir today')   # 在

《Python3.6官方》– 13 接下來

原文連線 13 章 接下來    讀到個別的指南,也許你已經迫不及待想使用python了——你渴望使用Python來解決現實發生的問題。你應該從何學習得更多呢?   指南是Python文件的一部分。其他的文件如下:    你應該瀏覽本手冊,裡面提供完整的(雖然簡潔)關於標準庫的型別,函式,和

《KAFKA官方:快速入門

快速入門 本教程假設讀者完全從零開始,電腦上沒有已經存在的Kafka和Zookeeper環境。以下內容需要注意的是:因為在類Unix平臺和Windows平臺上的Kafka控制指令碼不同,在Windows平臺上,需要使用路徑\bin\windows代替/bin,指令碼副檔名改為.bat。 第

《HttpClient官方 HTTP 快取

原文連結 譯者[xuheyang] 第六章. HTTP快取 6.1. 通用概念 HttpClient Cache 提供了用HttpClient(等效瀏覽器快取的Java實現)來相容HTTP / 1.1的快取層。實現遵循責任鏈模式,HttpClient快取的實現類可以替代預設無快取的HttpClient;完全

《HttpClient 官方 Fluent API

原文連結  譯者[white] 第五章:流式 API 5.1 易用 API 介面 4.2版本的 HttpClient 帶來了一組非常容易使用的流式 API(Fluent API) 介面。暴露的流式API(Fluent API) 介面中僅僅是 HttpClient 最基本的一些功能,這些介面是在

《HttpClient 官方 HTTP 狀態管理

原文連結 譯者[陳志軍] 通常 HTTP 被設計為無狀態,面向請求/響應的協議,對於有一些邏輯相關的請求/響應交換的有狀態會話沒有特別的規定。正當 HTTP 協議越來越流行和被認可,越來越多之前沒有打算使用它的系統,現在也開始為了應用程式而使用它。例如電子商務應用的內容傳輸。因此,支援 HTT

Spring Boot 官方參考

Appendix A. Common application propertiesVarious properties can be specified inside your application.properties/application.yml file or as command line swi

《精通Spring4.x企業應用開發實戰》

  這一章節主要介紹SpringBoot的使用,也是學習的重點內容,之後就打算用SpringBoot來寫後臺,所以提前看一下還是很有必要的。   3.SpringBoot概況 3.1.1SpringBoot發展背景   Spring Boot的出現。Spring Boot可讓開發人員不再需要編寫複雜的XML配