mediaTypes错误(Bean property 'mediaTypes' is not writable or has an invalid setter method.)

来源:互联网 发布:google tensorflow教程 编辑:程序博客网 时间:2024/04/27 17:48

ERRORBean property 'mediaTypes' is not writable or has an invalid setter method. Does theparameter type of the setter match the return type of the getter?

后续spring版本中的mediaTypes居然不支持setter方法了
(解决方法亲测有用)

错误描述

         一般的为了使用Json,对其配置:

     <bean    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">

         <propertyname="order"value="1"/>

          <propertyname="mediaTypes">

            <map>

                <entrykey="html"value="text/html"/>

                <entrykey="xml"value="application/html"/>

                <entrykey="json"value="application/json"/>

            </map>

        </property>

        <propertyname="defaultViews">

            <list>

                <bean      class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">

                </bean>

            </list>

        </property>

        <propertyname="ignoreAcceptHeader"value="true"/>

    </bean>

 

         结果是会出现上述错误提示:Bean property'mediaTypes' is not writable or has an invalid setter method. Does theparameter type of the setter match the return type of the getter?


      意思是ContentNegotiatingViewResolver中不再支持mediaTypes的setter方法了。究其原因,是因为ContentNegotiatingViewResolver的setMediaTypes(Map<String,String>mediaTypes)方法已经被弃用(deprecated),不仅如此,一同被deprecated的的还有setFavorPathEctension 、setFavorParameter、setIgnoreAcceptHeader等方法,但是,这些方法都转移到了ContentNegotiationManager中了,为此,要想对其使用,可以转换为对ContentNegotiationManager的配置。

       另外,对于数据形式的多种形式表述(html/xml/json/pdf/excel),Spring有两种表述形式:

              ・ org.springframework.web.servlet.view.ContentNegotiatingViewResolver

              ・ org.springframework.http.converter.HttpMessageConverte

       ContentNegotiatingViewResolver虽然是ViewResolver一族的,但是并不解析视图,而是将其委托给其他的ViewResolver。

       介于spring的两种表述方法,但是ContentNegotiatingViewResolver弃用了setMediaTypes,所以用contentNegotiationManager替换,但是配置contentNegotiationManager是通过ContentNegotiationManagerFactoryBean来实现的,所以,选择第一种办法,要对ContentNegotiationManagerFactoryBean进行配置。

       所以,在这里,呈现不同格式的数据可以有两种办法:ContentNegotiationManagerHttpMessageConverter

 

解决方法

           首先在pom.xml文件中加入依赖,然后对其选择一种配置方案即可成功,亲测有用。

加入依赖

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

         <version>2.5.4</version>

        </dependency>

 

方法1:配置ContentNegotiationManager

     <bean id="contentNegotiationManager"        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">

       <propertyname="favorParameter"value="true"/>

       <propertyname="parameterName"value="format"/>

       <propertyname="ignoreAcceptHeader"value="false"/>

       <propertyname="mediaTypes">

           <value>

                json=application/json

                xml=application/xml

            </value>

       </property>

       <propertyname="defaultContentType"value="text/html"/>

      </bean>


方法2:配置HttpMessageConverter

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 

    <property name="messageConverters"> 

        <list>

            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">               

                <property name="supportedMediaTypes"> 

                    <list>

                        <value>text/html;charset=UTF-8</value> 

                        <value>application/json;charset=UTF-8</value> 

                    </list> 

                </property> 

            </bean> 

        </list> 

    </property> 

</bean>


友情链接:http://www.tuicool.com/articles/N3Mfeim

1 0
原创粉丝点击