1. ContentNegotiatingViewResolver,这个视图解析器允许你用同样的内容数据来呈现不同的view。它支持如下面描述的三种方式:
    1. 1)使用扩展名
      http://localhost:8080/employees/nego/Jack.xml  返回结果为XML
      http://localhost:8080/employees/nego/Jack.json 返回结果为JSON
      http://localhost:8080/employees/nego/Jack  使用默认view呈现,比如JSP

      2) HTTP Request Header中的Accept,Accept 分别是 text/jsp,  text/pdf,  text/xml,  text/json,  无Accept 请求头

      3) 使用参数
      http://localhost:8080/employees/nego/Jack?format=xml  返回结果为XML
      http://localhost:8080/employees/nego/Jack?format=json 返回结果为JSON

  2.  ContentNegotiatingViewResolver 可以一个@RequestMapping,返回多个view。
  3. 配置
    1. <property name="favorPathExtension" value="true"></property> 是否启用扩展名支持,默认是true

      <property name="favorParameter" value="false"></property> 是否启用参数支持,默认是true

      <property name="ignoreAcceptHeader" value="true"></property> 是否忽略掉accept header,默认就是false

    2. spring 给我们提供了 ContentNegotiationManagerFactoryBean这是推荐的方式。 配置上类似。
      1. <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="ignoreAcceptHeader" value="true"/>
        <property name="favorPathExtension" value="true"/>
        <property name="defaultContentType" value="text/html"/>
        <property name="favorParameter" value="true"/>
        <property name="mediaTypes">
        <map>
        <entry key="xml" value="application/xml"/>
        <entry key="json" value="text/plain"/>
        <entry key="xls" value="application/vnd.ms-excel"/>
        </map>
        </property>
        </bean>
      2. <bean id="viewResolver"
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="contentNegotiationManager" ref="cnManager"/>
        <property name="viewResolvers"><!-- 针对freemarker的视图配置 -->
        <list>
        <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
        <property name="viewNames" value=".ftl"/>
        <property name="contentType" value="text/html; charset=utf-8"/>
        <property name="cache" value="true" />
        <property name="prefix" value="" />
        <property name="suffix" value="" />
        <property name="order" value=""/>
        </bean>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/jsp/"></property><!-- 配置页面路径 -->
        <property name="suffix" value=".jsp"></property><!-- 文件以value值结尾 -->
        </bean>
        </list>
        </property>
        <property name="defaultViews">
        <list>
        <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
        <!-- <property name="extractValueFromSingleKeyModel" value="true"/> -->
        <property name="prettyPrint" value="true"/>
        <property name="contentType" value="text/plain"/>
        </bean>
        <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
        <constructor-arg ref="jaxb2Marshaller"> </constructor-arg>
        </bean>
        <bean class="com.wonders.stpt.bid.controller.JXLExcelView"/>
        </list>
        </property>
        </bean>
      3. defaultViews的作用:在defaultViews里注册的视图会在ContentNegotiationViewResolver中注册自己支持的内容类型

      4. 由ContentNegotiationManagerFactoryBean的mediaTypes决定响应的内容类型
      5. 当contentNegotiationManager决定好响应的内容类型后,ContentNegotiationViewResolver就会根据该内容类型选择一个兼容的View进行渲染输出
      6. 一旦有View对请求内容匹配,就直接渲染输出,不会进行ViewResolver的查询。
      7. 当注册的内容类型都不兼容时,会查询viewResolver中的ViewResolver是否支持该请求,如果ViewResolver表示支持该请求,那么就由该ViewResolver负责视图渲染,如果ViewResolver表示不支持该请求,则查询下一个ViewResolver,直至所有的ViewResolver查询完毕。
    3. 默认是支持path 后缀拓展方式, 也支持accept 请求头,但不支持 format 参数的

Spring 梳理 - ContentNegotiatingViewResolver的更多相关文章

  1. Spring 梳理 - filter、interceptor、aop实现与区别 -第二篇

    spring mvc中的Interceptor可以理解为是Spring MVC框架对AOP的一种实现方式.一般简单的功能又是通用的,每个请求都要去处理的,比如判断token是否失效可以使用spring ...

  2. Spring 梳理 - filter、interceptor、aop实现与区别 -第一篇

    前言 项目中我们经常需要对RESTful api进行拦截,主流实现方法有filter.interceptor.aop,先说一下他们各自的实现. Filter AnimalFilter实现javax.s ...

  3. Spring 梳理 - View - JSON and XML View

    实际案例json <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  4. Spring 梳理 - 视图解析器 VS 视图(View,ViewResolver)

    View View接口表示一个响应给用户的视图,例如jsp文件,pdf文件,html文件等 该接口只有两个方法定义,分别表明该视图的ContentType和如何被渲染 Spring中提供了丰富的视图支 ...

  5. Spring 梳理 - javaConfig在App和webApp中的应用

    package com.dxz.demo.configuration; import org.springframework.context.annotation.Configuration; @Co ...

  6. Spring 梳理 - @Component

    使用@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符.如果不指定标识符,默认为首字母小写类名.例如类UserController的标识 ...

  7. Spring 梳理 - @Autowired VS @Resource

    Autowired @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property.当然,getter看个人需求,如果私 ...

  8. Spring 梳理 - AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)

    Spring  AOP那些学术概念—通知.增强处理连接点(JoinPoint)切面(Aspect)   1.我所知道的AOP 初看起来,上来就是一大堆的术语,而且还有个拉风的名字,面向切面编程,都说是 ...

  9. Spring 梳理 - JavaConfig、SPI、SCI、SpringSCI、WebApplicationInitializer、AbstractAnnotationConfigDispatcherServletInitializer、WebMvcConfigurationSupport

    总结1: SCI:Servlet容器(Tomcat)提供的初始化Servlet容器本身的接口,可替换web.xml SpringSCI:SpringServletContainerInitialize ...

随机推荐

  1. Apache—dbutils开源JDBC工具类库简介

    Apache—dbutils开源JDBC工具类库简介 一.前言 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用 ...

  2. pytest-html报告修改与汉化

    前言 Pytest框架可以使用两种测试报告,其中一种就是使用pytest-html插件生成的测试报告,但是报告中有一些信息没有什么用途或者显示的不太好看,还有一些我们想要在报告中展示的信息却没有,最近 ...

  3. MyBatis 封装Map,返回不同实体的集合对象

    现在有一个需求,就是从100个表中获得任意表中的数据,按照正常的思维模式和处理方式, 我们首先会创建100个实体类(累死!),然后通过resultType一一对应实体类,这种方式简直...  那么我们 ...

  4. dataGrip连接数据库失败[08001]的一种可能原因

      我使用的是mac系统,并且由于机型较老,容量不高,为减轻系统负荷,没有设置开机自动启动MYSQL服务.这导致我在一次重启后,重新开启服务,然后就出现了dataGrip连接不上数据库: 在网上查找相 ...

  5. Mysql高手系列 - 第4天:DDL常见操作汇总

    这是Mysql系列第4篇. 环境:mysql5.7.25,cmd命令中进行演示. DDL:Data Define Language数据定义语言,主要用来对数据库.表进行一些管理操作. 如:建库.删库. ...

  6. [Error] - Windows卸载程序时,提示错误2503

    1. 打开“任务管理器” 2. 切换到“详细信息”标签页,找到explorer.exe文件,并结束它. 3. 点击“任务管理器”上的文件->运行新任务,输入explorer.ext,勾选“以系统 ...

  7. 2019DX#6

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Salty Fish 16.28%(7/43)  OK 1002 Nonsense Tim ...

  8. HDU 4322Candy 最大费用最大流

    由于被小孩子不喜欢的糖果的对小孩产生的效力是一样的,所以我们在网络流的时候先不考虑. 1 - 源点0到1~N个糖果,容量为1,费用为02 - 根据like数组,like[i][j] == 1时在糖果j ...

  9. HDU 6430 Problem E. TeaTree(虚树)

    Problem E. TeaTree Problem Description Recently, TeaTree acquire new knoledge gcd (Greatest Common D ...

  10. Spring boot 全局配置 properties或者yml文件报错

    主要问题是没有扫描到配置文件 在pom文件里面<build>    </build>中加上以下代码就可以保证能扫描到了 <resources> <resour ...