我正在 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/