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方法。

posted on 2018-05-01 21:36  康纳酱  阅读(401)  评论(2编辑  收藏  举报

导航