SpringMVC 4.1 新特性(二)内容协商视图

SpingMVC的内容协商支持三种方式:

  1. 使用后缀,如.json.xml后缀和处理类型的关系可以自己定义
  2. 前面说的使用Accept头
  3. 在访问时request请求的参数,比如每次请求request都会加format=xml参数,表示要求返回XML格式数据,默认参数名是format,可以修改。

SpingMVC规定,如果同时开启了上面的部分或全部方式,解析顺序是后缀、参数、Accept头。对我来说,还是比较喜欢用Accept头,用的时间长,比较适应。

SpingMVC文件中的配置方式如下:


  1. content-negotiation-manager="contentNegotiationManager" />
  2.  
  3. id="contentNegotiationManager"
  4. class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
  5. name="favorPathExtension" value="true" />
  6. name="favorParameter" value="false" />
  7. name="parameterName" value="format" />
  8. name="ignoreAcceptHeader" value="false"/>
  9. name="useJaf" value="false"/>
  10. name="defaultContentType" value="text/html" />
  11.  
  12. name="mediaTypes">
  13. key="json" value="application/json" />
  14. key="xml" value="application/xml" />

  • favorPathExtension参数表示是否开启后缀,默认true。(使用形如/account/a.json/account/a.xml的方式)
  • favorParameter参数表示是否开启request参数识别,默认false。(使用形如/account/a?format=json/account/?format=xml的方式)
  • parameterName参数表示使用参数的名字,默认format,如果配置为mediaType,则请求格式变为/account/a?mediaType=json
  • ignoreAcceptHeader表示是否关闭accept头识别,默认false,即默认开启accept头识别。
  • defaultContentType表示服务器默认的MediaType类型。

  1. class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  2. name="order" value="0"/>
  3. name="contentNegotiationManager" ref="contentNegotiationManager"/>
  4. name="viewResolvers">
  5. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  6. name="prefix" value="/WEB-INF/views/" />
  7. name="suffix" value=".jsp" />
  8. name="defaultViews">
  9. class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
  10. name="extractValueFromSingleKeyModel" value="true" />
  11. class="org.springframework.web.servlet.view.xml.MarshallingView">
  12. name="marshaller">
  13. class="org.springframework.oxm.xstream.XStreamMarshaller"/>

在Spring4.1之后提供了视图解析器标签,可以用如下方式


  1. class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
  2. name="jsonpParameterNames">
  3. jsonp
  4. callback
  5. name="extractValueFromSingleKeyModel" value="true" />
  6. class="org.springframework.web.servlet.view.xml.MarshallingView">
  7. name="marshaller">
  8. class="org.springframework.oxm.xstream.XStreamMarshaller">
  9. name="autodetectAnnotations" value="true" />
  10. prefix="/WEB-INF/views/" suffix=".jsp" />

mvc:content-negotiation用于定义内容协商的视图解析器,且内部可以定义默认视图;然后我们又定义了mvc:velocitymvc:groovy两个视图解析器;它们会按照顺序进行解析。另外几个视图解析器是:

mvc:freemarker 
mvc:bean-name 
mvc:jsp

你可能感兴趣的:(SpringMVC)