【问题标题】:Spring web application, try to send response as json throwing error 500 errorSpring Web应用程序,尝试将响应作为json抛出错误500错误发送
【发布时间】:2013-08-22 15:10:30
【问题描述】:

我正在 Spring 框架中开发一个 Web 应用程序。当请求作为 ModelAndView 响应类型提供服务时。它运行良好,但是当我尝试将响应作为 json 提供时,它会抛出一个错误

例外

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.codehaus.jackson.map.SerializationConfig.isEnabled(Lorg/codehaus/jackson/map/SerializationConfig$Feature;)Z
org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259)

根本原因

java.lang.NoSuchMethodError: org.codehaus.jackson.map.SerializationConfig.isEnabled(Lorg/codehaus/jackson/map/SerializationConfig$Feature;)Z
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:193)

控制器中的方法

@RequestMapping(value="/getFBFriendsList",method=RequestMethod.GET)<br/>
public @ResponseBody List<String> getStatesList(HttpServletRequest req){<br/>
    List<String> statesList = null;
    try{<br/>
    statesList = new ArrayList<String>();<br/>
    //..here i am getting states from datebase and adding to list<br/>
    }<br/>
    catch(Exception e){}<br/>
    return statesList;
}

调度程序 Servlet 中的配置

<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
    <property name="supportedMediaTypes" value="application/json" />
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonHttpMessageConverter" />
        </list>
    </property>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass">
        <value>
            org.springframework.web.servlet.view.tiles2.TilesView
        </value>
    </property>
</bean>

我正在使用杰克逊罐子

  • jackson-core-asl-1.9.0.jar
  • jackson-mapper-asl-1.9.0.jar
  • json-lib-0.9.jar

Spring 版本是 3.2.4

【问题讨论】:

  • 您将哪些对象放入您的列表中?

标签: json spring web-applications spring-mvc


【解决方案1】:

看来您至少需要使用 Jackson 1.9.2 或更高版本。在 Jackson 1.9.0 和 1.9.1 的源代码中,org.codehaus.jackson.map.SerializationConfig.isEnabled() 的方法定义已被删除。这就是您收到 NoSuchMethodError 异常的原因。

然后在 Jackson 1.9.2 的源代码中,您会看到以下内容:

/*
/**********************************************************
/* MapperConfig overrides for 1.8 backwards compatibility
/**********************************************************
 */

/* NOTE: these are overloads we MUST have, but that were missing
 * from 1.9.0 and 1.9.1. Type erasure can bite in the ass...
 *<p>
 * NOTE: will remove either these variants, or base class one, in 2.0.
 */

/** 
 * Alias for {@link MapperConfig#isEnabled(org.codehaus.jackson.map.MapperConfig.ConfigFeature)}.
 * 
 * @since 1.0 However, note that version 1.9.0 and 1.9.1 accidentally missed
 *    this overloaded variant
 */
public boolean isEnabled(SerializationConfig.Feature f) {
    return (_featureFlags & f.getMask()) != 0;
}

因此,简而言之,不要将 Jackson 版本 1.9.0 或 1.9.1 与 Spring MVC 一起使用,因为 Jackson 开发人员删除了一些实际需要的内容。

【讨论】:

  • 即使在放置 1.9.9 罐后,我仍然遇到同样的错误 .. 请参阅下文了解我使用过的罐子
  • 即使放置 1.9.9 罐子后我仍然遇到同样的错误.. 请参阅下面的罐子我使用过 commons-beanutils-1.8.0.jar commons-digester-2.0.jar commons-fileupload -1.1.1.jar commons-io-1.2.jar" commons-logging-1.1.1.jar jstl-1.2.jar log4j-1.2.14.jar Spring 所有 3.2.4 jar tiles-api-2.2.1.jar tiles-core-2.2.1.jar tiles-jsp-2.2.1.jar velocity-1.7.jar commons-codec-1.6.jar commons-collections-3.2.1.jar commons-lang-2.4.jar ezmorph-1.0.4.jar jackson-core-asl-1.9.9.jar jackson-mapper- asl-1.9.9.jar
【解决方案2】:

在@RequestMapping 中提到produces 属性,指定响应的媒体类型。

【讨论】:

    【解决方案3】:

    不要使用更高(2.x.x)版本的 jackson-core、jackson-annotations 和 jackson-databind 或使用更早(低于 1.9.2)版本的 jackson-all,而是使用 jackson-all-1.9.9 jar。这是link

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2017-09-18
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多