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.