2011-05-30 39 views
5

我打算做的是配置spring mvc 3在json响应中不返回“null”对象。 我提问了how to configure spring mvc 3 to not return "null" object in json response?。我得到的建议是配置ObjectMapper,将序列化包含设置为JsonSerialize.Inclusion.NON_NULL。所以根据Spring configure @ResponseBody JSON format,我在spring配置文件中做了以下更改。但在应用程序启动过程中,我收到了错误“拒绝的bean名称jacksonObjectMapper':没有标识org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping:的URL路径:86-AbstractDetectingUrlHandlerMapping.java”。配置jacksonObjectMapper不能在春天工作mvc 3

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <!-- Configures the @Controller programming model --> 
    <mvc:annotation-driven /> 

    <!-- Forwards requests to the "/" resource to the "welcome" view --> 
    <!--<mvc:view-controller path="/" view-name="welcome"/>--> 

    <!-- Configures Handler Interceptors -->  
    <mvc:interceptors> 
     <!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de --> 
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
    </mvc:interceptors> 

    <!-- Saves a locale change using a cookie --> 
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> 


    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <property name="messageConverters"> 
      <list> 
       <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
        <property name="objectMapper" ref="jacksonObjectMapper" /> 
       </bean> 
      </list> 
     </property> 
    </bean> 

    <bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> 
    <bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig" 
    factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" /> 
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
     <property name="targetObject" ref="jacksonSerializationConfig" /> 
     <property name="targetMethod" value="setSerializationInclusion" /> 
     <property name="arguments"> 
      <list> 
       <value type="org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion">NON_DEFAULT</value> 
      </list> 
     </property> 
    </bean> 


    <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

</beans> 

我不知道为什么它被拒绝。任何建议,非常感谢!

回答

7

<mvc:annotation-driven />AnnotationMethodHandlerAdapter不能一起使用。 (ref:spring forum thread)。可能的解决方案

  1. 不使用<mvc:annotation-driven/>。声明豆:DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter和其他设置,如验证,格式。

  2. 使用弹簧3.1,其具有<mvc:message-converters>(参照Spring jira

+0

我发现[这个博客帖子](http://software.sawano.se/2012/03/controlling-message-converters -with.html)在试图找出如何使用''元素时很有用。 – DuffJ 2013-07-27 13:41:00