java.lang.IllegalArgumentException:找不到返回值的转换器:类 java.util.Ha



我在pom中添加了以下依赖项.xml并带有<jackson.version>2.7.4</jackson.version>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>

我检查了一些相关问题,但大多数解决方案要么与依赖项缺失有关,要么与 setter/getter 问题有关。在这里,我只是将值放入 HashMap 中并在响应正文中返回它,但我收到异常

@GetMapping("/json")
public @ResponseBody
Map<String, String> getValues() {
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < 20; i++) {
map.put(UUID.randomUUID().toString(),
String.valueOf(getRandomNumberBetween(0, 4)));
}
return map;
}

每当我调用上面的 URL 时,我都会得到以下异常:

java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.HashMap
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:187)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.drools6spring.filter.SessionCookieFilter.doFilter(SessionCookieFilter.java:69)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Feb 7, 2018 9:37:07 AM org.apache.catalina.core.StandardWrapperValve invoke

谁能找出我哪里出错了。

根本问题是 STS 中的 Maven 插件。 不知何故,它没有反映项目中pom.xml声明的依赖项,而且pom.xml也没有错误。我重新安装了 maven 插件并更新了项目,它无需更改代码即可工作。

问题应该是你没有一个类型为 MappingJackson2HttpMessageConverter 的 bean,尝试修改你的 ApplicationContext.xml如下所示:

<mvc:annotation-driven  />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
<property name="messageConverters">  
<list>  
<ref bean="mappingJacksonHttpMessageConverter" />  
</list>  
</property>  
</bean>  
<bean id="mappingJacksonHttpMessageConverter"  
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
<property name = "supportedMediaTypes">  
<list>  
<bean class="org.springframework.http.MediaType">  
<constructor-arg index="0" value="text"/>  
<constructor-arg index="1" value="plain"/>  
<constructor-arg index="2" value="UTF-8"/>  
</bean>  
<bean class="org.springframework.http.MediaType">  
<constructor-arg index="0" value="*"/>  
<constructor-arg index="1" value="*"/>  
<constructor-arg index="2" value="UTF-8"/>  
</bean>  
<bean class="org.springframework.http.MediaType">  
<constructor-arg index="0" value="text"/>  
<constructor-arg index="1" value="*"/>  
<constructor-arg index="2" value="UTF-8"/>  
</bean>  
<bean class="org.springframework.http.MediaType">  
<constructor-arg index="0" value="application"/>  
<constructor-arg index="1" value="json"/>  
<constructor-arg index="2" value="UTF-8"/>  
</bean>  
</list>  
</property>  
</bean>   

如果进行此更改后它仍然不起作用,请与我联系。

相关内容

最新更新