Spring MVC 啟用MVC Java編程配置或MVC命名空間

2018-07-26 14:49 更新

要啟用MVC Java編程配置,你需要在其中一個注解了@Configuration的類上添加@EnableWebMvc注解:

@Configuration
@EnableWebMvc
public class WebConfig {

}

要啟用XML命名空間,請在你的DispatcherServlet上下文中(如果沒有定義任何DispatcherServlet上下文,那么就在根上下文中)添加一個mvc:annotation-driven元素:

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

</beans>

上面的簡單的聲明代碼,就已經(jīng)默認(rèn)注冊了一個RequestMappingHandlerMapping、一個RequestMappingHandlerAdapter,以及一個ExceptionHandlerExceptionResolver,以支持對使用了@RequestMapping、@ExceptionHandler及其他注解的控制器方法的請求處理。

同時,上面的代碼還啟用了以下的特性:

  1. Spring 3風(fēng)格的類型轉(zhuǎn)換支持。這是使用一個配置的轉(zhuǎn)換服務(wù)ConversionService實例,以及the JavaBeans PropertyEditors used for Data Binding.
  2. 使用@NumberFormat對數(shù)字字段進(jìn)行格式化,類型轉(zhuǎn)換由ConversionService實現(xiàn)
  3. 使用@DateTimeFormat注解對DateCalendar、Long及Joda Time類型的字段進(jìn)行格式化
  4. 使用@Valid注解對@Controller輸入進(jìn)行驗證——前提是classpath路徑下比如提供符合JSR-303規(guī)范的驗證器
  5. HTTP消息轉(zhuǎn)換HttpMessageConverter的支持,對注解了@RequestMapping@ExceptionHandler方法的@RequestBody方法參數(shù)或@ResponseBody返回值生效

下面給出了一份由mvc:annotation-driven注冊可用的HTTP消息轉(zhuǎn)換器的完整列表:

  1. 轉(zhuǎn)換字節(jié)數(shù)組的ByteArrayHttpMessageConverter
  2. 轉(zhuǎn)換字符串的StringHttpMessageConverter
  3. ResourceHttpMessageConverterorg.springframework.core.io.Resource與所有媒體類型之間的互相轉(zhuǎn)換
  4. SourceHttpMessageConverter:從(到)javax.xml.transform.Source的轉(zhuǎn)換
  5. FormHttpMessageConverter:數(shù)據(jù)與MultiValueMap<String, String>之間的互相轉(zhuǎn)換
  6. Jaxb2RootElementHttpMessageConverter:Java對象與XML之間的互相轉(zhuǎn)換——該轉(zhuǎn)換器在classpath路徑下有JAXB2依賴并且沒有Jackson 2 XML擴(kuò)展時被注冊
  7. MappingJackson2HttpMessageConverter:從(到)JSON的轉(zhuǎn)換——該轉(zhuǎn)換器在classpath下有Jackson 2依賴時被注冊
  8. MappingJackson2XmlHttpMessageConverter:從(到)XML的轉(zhuǎn)換——該轉(zhuǎn)換器在classpath下有Jackson 2 XML擴(kuò)展時被注冊
  9. AtomFeedHttpMessageConverter:Atom源的轉(zhuǎn)換——該轉(zhuǎn)換器在classpath路徑下有Rome時被注冊
  10. RssChannelHttpMessageConverter:RSS源的轉(zhuǎn)換——該轉(zhuǎn)換器在classpath路徑下有Rome時被注冊

你可以參考21.16.12 消息轉(zhuǎn)換器一小節(jié),了解如何進(jìn)一步定制這些默認(rèn)的轉(zhuǎn)換器。

Jackson JSON和XML轉(zhuǎn)換器是通過Jackson2ObjectMapperBuilder創(chuàng)建的ObjectMapper實例創(chuàng)建的,目的在于提供更好的默認(rèn)配置

該builder會使用以下的默認(rèn)屬性對Jackson進(jìn)行配置:

  1. 禁用DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

  2. 禁用MapperFeature.DEFAULT_VIEW_INCLUSION

同時,如果檢測到在classpath路徑下存在這些模塊,該builder也會自動地注冊它們:

  1. jackson-datatype-jdk7: 支持Java 7的一些類型,例如java.nio.file.Path

  2. jackson-datatype-joda: 支持Joda-Time類型

  3. jackson-datatype-jsr310: 支持Java 8的Date & Time API類型

  4. jackson-datatype-jdk8: 支持Java 8其他的一些類型,比如Optional


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號