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

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文件中加入依赖,然后对其选择一种配置方案即可成功,亲测有用。

加入依赖

   

方法1:配置ContentNegotiationManager

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
</dependency>

方法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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值