MessageTemplate 导致没有转换器在 MVC 控制器中发现异常?
MessageTemplate cause no converter found exception in MVC controller?
我正在将消息从 REST API 发送到 SI 消息通道,该通道委托给发送消息适配器。消息适配器向 TCP 客户端发送消息。什么都不需要 return/response。我的 TCP 客户端成功收到消息,但 MVC 控制器抛出异常
控制器代码
@Autowired
MessageChannel invokeChannel;
@RequestMapping(value="/invoke/{payload}")
public ResponseEntity<String> sayHello(@PathVariable String payload)
{
//trigger gateway to send a message
MessagingTemplate template = new MessagingTemplate();
template.send(invokeChannel, new GenericMessage<String>(payload));
return new ResponseEntity<String>(payload, HttpStatus.OK);
}
异常
java.lang.IllegalArgumentException: No converter found for return
value of type: class java.lang.String
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178)
org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:183)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我找不到造成这种情况的原因。我在 return new ResponseEntity(...)
的断点没有到达。
我的 webmvcconfig
@EnableWebMvc
@Configuration
@ComponentScan({ "helloworldmvc" })
public class WebappConfig extends WebMvcConfigurerAdapter {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
return new PropertySourcesPlaceholderConfigurer();
}
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
converters.add(new MongoMessageConverter());
}
}
//trigger gateway to send a message
您应该确保 template.send(invokeChannel)
的流程确实是 单向 。没有一个网关可以在那里等待。这是你的评论:
my breakpoint at return new ResponseEntity(...)
is not reached.
如果您无法找到该行代码,请尝试准确调试 AbstractMessageConverterMethodProces
。还有需要弄清楚代码后面为什么是producibleMediaTypes
:
List<MediaType> producibleMediaTypes = getProducibleMediaTypes(servletRequest, clazz, type);
if (value != null && producibleMediaTypes.isEmpty()) {
throw new IllegalArgumentException("No converter found for return value of type: " + clazz);
}
为空。也许您要求使用一些 Accept
与字符串不兼容?或者您的 WebMvcConfigurer
在没有任何 String-aweer 转换器的情况下以某种方式覆盖了 List<HttpMessageConverter<?>> converters
?
错误信息:
No converter found for return value of type: class java.lang.String
它表示 MVC 不知道 converter
使用哪个 return 来自此服务的 REST 响应。使用 spring.
中可用的默认转换器
Please add an annotation @ResposeBody
in the method signature.
我正在将消息从 REST API 发送到 SI 消息通道,该通道委托给发送消息适配器。消息适配器向 TCP 客户端发送消息。什么都不需要 return/response。我的 TCP 客户端成功收到消息,但 MVC 控制器抛出异常
控制器代码
@Autowired
MessageChannel invokeChannel;
@RequestMapping(value="/invoke/{payload}")
public ResponseEntity<String> sayHello(@PathVariable String payload)
{
//trigger gateway to send a message
MessagingTemplate template = new MessagingTemplate();
template.send(invokeChannel, new GenericMessage<String>(payload));
return new ResponseEntity<String>(payload, HttpStatus.OK);
}
异常
java.lang.IllegalArgumentException: No converter found for return value of type: class java.lang.String org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:178) org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:183) org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我找不到造成这种情况的原因。我在 return new ResponseEntity(...)
的断点没有到达。
我的 webmvcconfig
@EnableWebMvc
@Configuration
@ComponentScan({ "helloworldmvc" })
public class WebappConfig extends WebMvcConfigurerAdapter {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
return new PropertySourcesPlaceholderConfigurer();
}
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
converters.add(new MongoMessageConverter());
}
}
//trigger gateway to send a message
您应该确保 template.send(invokeChannel)
的流程确实是 单向 。没有一个网关可以在那里等待。这是你的评论:
my breakpoint at
return new ResponseEntity(...)
is not reached.
如果您无法找到该行代码,请尝试准确调试 AbstractMessageConverterMethodProces
。还有需要弄清楚代码后面为什么是producibleMediaTypes
:
List<MediaType> producibleMediaTypes = getProducibleMediaTypes(servletRequest, clazz, type);
if (value != null && producibleMediaTypes.isEmpty()) {
throw new IllegalArgumentException("No converter found for return value of type: " + clazz);
}
为空。也许您要求使用一些 Accept
与字符串不兼容?或者您的 WebMvcConfigurer
在没有任何 String-aweer 转换器的情况下以某种方式覆盖了 List<HttpMessageConverter<?>> converters
?
错误信息:
No converter found for return value of type: class java.lang.String
它表示 MVC 不知道 converter
使用哪个 return 来自此服务的 REST 响应。使用 spring.
Please add an annotation
@ResposeBody
in the method signature.