java之ssm框架搭建中遇到的问题
--------------------------2018-4-25更新------------------------------
spring 4.0.2.RELEASE版本可能不能被jdk8u161版本识别,导致使用不了注解,最好用4.3.1.RELEASE以上的版本(4.3以下没试过不知道,用的时候是4.3.1和4.3.9都可以)
在使用tomcat启动时候可能会发生LOC异常(基本上是jar包错误)详情请看:https://www.cnblogs.com/miye/p/7211602.html
由于spring版本用的是4.3以上可能会发生:Spring集成JSON报错:java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException
详情请看:https://blog.csdn.net/jiaotuwoaini/article/details/52366057
由于换成了spring4.3.9.RELEASE,tomcat启动报异常org.springframework.beans.NotWritablePropertyException: Invalid property 'ignoreAcceptHeader' of bean class [org.springframework.web.servlet.view.ContentNegotiatingViewResolver]: Bean property 'ignoreAcceptHeader' is not writable or has an invalid setter
由错误可知在org.springframework.web.servlet.view.ContentNegotiatingViewResolver试图解析器中ignoreAcceptHeader属性没有getset方法。所以视图解析图须作如下修改
新增一个关于org.springframework.web.accept.ContentNegotiationManagerFactoryBean的bean,id取为cnManager(随意),具体配置如下:
<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="false" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xls" value="application/vnd.ms-excel" />
<entry key="xlsx"
value="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<entry key="pdf" value="application/pdf" />
</map>
</property>
</bean>
然后试图解析器将原来的property替换掉,
原来是这样

代码如下:
<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="false" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xls" value="application/vnd.ms-excel" />
<entry key="xlsx"
value="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<entry key="pdf" value="application/pdf" />
</map>
</property>
</bean>
修改后是这样,只有2个property了。
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="contentNegotiationManager" ref="cnManager"/>
<property name="viewResolvers">
<list>
<!-- 配置freeMarker视图解析器 -->
<bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" /><!-- 上面已经配了,这里就不用配啦 -->
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="allowSessionOverride" value="true" />
<property name="allowRequestOverride" value="true" />
<property name="exposeSpringMacroHelpers" value="false" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="requestContextAttribute" value="request" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</list>
</property>
</bean>
原因是ContentNegotiatingViewResolver里面的ignoreAcceptHeader属性调整到了org.springframework.web.accept.ContentNegotiationManagerFactoryBean里面包括get、set方法。
浙公网安备 33010602011771号