我正在Spring框架中开发一个Web应用程序。当请求作为ModelAndView respose类型提供时。它运作良好,但当我尝试以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>
我正在使用杰克森罐子
和Spring版本是3.2.4
答案 0 :(得分:9)
看起来您至少需要使用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 :(得分:0)
在@RequestMapping中提及生成属性,指定响应的媒体类型。
答案 2 :(得分:0)
使用jackson-all-1.9.9 jar,而不是使用更高(2.x.x)版本的jackson-core,jackson-annotations和jackson-databind或使用更早版本(低于1.9.2)的jackson-all版本。这是link。