今天在修改前人代码时,遇到一个需要 mapping /{var1}/{var2}/{var3} ,/{var1}/{var2} 的需求,在mapping中将value= “/{var1}/{var2}/{var3}” 更改为 {“/{var1}/{var2}/{var3}”,“/{var1}/{var2}”}后,修改 @PathVariable 增加required参数后运行提示不支持,查阅文档发现,该参数时spring 自4.3.3 版本添加,故将应用的spring版本升级到4.3.20;
再次编译运行报 Invalid property 'favorParameter' 错误;
springmvc配置如下
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json返回json格式数据 /blog/1.xml返回xml格式数据
/blog.do返回jsp -->
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<!-- 用于开启 /userinfo/123?format=json 的支持 -->
<property name="favorParameter" value="false" />
<!-- 设置为true以忽略对Accept Header的支持 -->
<property name="ignoreAcceptHeader" value="true" />
<!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
<property name="defaultContentType" value="text/html" />
<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
<!-- spring3.1的配置模式 -->
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages" />
<property name="suffix" value=".jsp"></property>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<!-- fastjson方式 -->
<bean class="com.tydic.framework.base.view.FrameworkJacksonJsonView">
</bean>
</list>
</property>
</bean>
ContentNegotiatingViewResolver 中的 favorParameter、ignoreAcceptHeader、mediaTypes等在4.1版时即为即将删除;在4.3版本中已无这些属性;通过参考 此文 和 文章2 了解到 这些属性已移至 ContentNegotiationManagerFactoryBean 这个类中;故而修改配置文件如下完成修改:
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json返回json格式数据 /blog/1.xml返回xml格式数据
/blog.do返回jsp -->
<bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!-- 用于开启 /userinfo/123?format=json 的支持 -->
<property name="favorParameter" value="false" />
<!-- 设置为true以忽略对Accept Header的支持 -->
<property name="ignoreAcceptHeader" value="true" />
<!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
<property name="defaultContentType" value="text/html" />
<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
<!-- spring3.1的配置模式 -->
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
</bean>
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="contentNegotiationManager" ref="cnManager"/>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages" />
<property name="suffix" value=".jsp"></property>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<!-- fastjson方式 -->
<bean class="com.tydic.framework.base.view.FrameworkJacksonJsonView">
</bean>
</list>
</property>
</bean>