json - Spring Web 应用程序,尝试将响应作为 json 抛出错误 500 错误发送

标签 json spring web-applications spring-mvc

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

异常(exception)

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)

Controller 中的方法

@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 jar

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

Spring 版本是 3.2.4

最佳答案

看来您至少需要使用 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 开发人员删除了实际需要的内容。

关于json - Spring Web 应用程序,尝试将响应作为 json 抛出错误 500 错误发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337220/

相关文章:

java - 过滤crud list问题玩!框架

ios Restkit - 将对象与另一个列表中的列表映射

ios - Swift:图像缓存无法正常工作

java - 我应该如何从另一个spring项目中调用打包的spring项目?

Spring 安全: authorize on two or more web applications simultaneously

php - 可以使用Javascript从其他网站获取数据吗?

ios - 使标签可复制

java - 从 Json 文件中读取 JsonElement?

PHP MySQL Google Chart JSON - 完整示例

java 日志记录噩梦和 log4j 在 spring + tomcat6 中的行为不符合预期