String MessageTemplate是否导致MVC控制器中未找到转换器异常?

String MessageTemplate是否导致MVC控制器中未找到转换器异常?,string,spring,spring-mvc,converter,String,Spring,Spring Mvc,Converter,我正在将消息从RESTAPI发送到SI消息通道,该通道委托给发送消息适配器。消息适配器向TCP客户端发送消息。无需返回/响应任何内容。我的TCP客户端成功接收到消息,但MVC控制器引发异常 控制器代码 @Autowired MessageChannel invokeChannel; @RequestMapping(value="/invoke/{payload}") public ResponseEntity<String> sayHello(@PathVar

我正在将消息从RESTAPI发送到SI消息通道,该通道委托给发送消息适配器。消息适配器向TCP客户端发送消息。无需返回/响应任何内容。我的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);
    }
//触发网关以发送消息

您应该确保
template.send(invokeChannel)
的流确实是单向的。没有一个网关可以在那里等待。这就是你的评论,比如:

未达到我在
返回新响应属性(…)
处的断点

如果无法访问该行代码,请尝试精确调试该
AbstractMessageConverterMethodProcess
。并且需要找出为什么代码后面有
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);
    }
List producibleMediaTypes=getProducibleMediaTypes(servletRequest,clazz,type);
if(value!=null&&producibleMediaTypes.isEmpty()){
抛出新的IllegalArgumentException(“未找到类型为“+clazz”的返回值的转换器);
}
是空的。也许您的请求使用了一些与字符串不兼容的
Accept
?或者您的
webmvcconfiguer
覆盖
列表
//触发网关以发送消息

您应该确保
template.send(invokeChannel)
的流确实是单向的。没有一个网关可以在那里等待。这就是你的评论,比如:

未达到我在
返回新响应属性(…)
处的断点

如果无法访问该行代码,请尝试精确调试该
AbstractMessageConverterMethodProcess
。并且需要找出为什么代码后面有
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);
    }
List producibleMediaTypes=getProducibleMediaTypes(servletRequest,clazz,type);
if(value!=null&&producibleMediaTypes.isEmpty()){
抛出新的IllegalArgumentException(“未找到类型为“+clazz”的返回值的转换器);
}
是空的。也许您的请求使用了一些与字符串不兼容的
Accept
?或者您的
webmvcconfiguer
overrides
List错误消息:

未找到类型为java.lang.String的返回值的转换器

它表示MVC不知道使用哪个
转换器
从该服务返回REST响应。使用spring中提供的默认转换器

请在方法签名中添加注释
@ResposeBody

错误消息:

未找到类型为java.lang.String的返回值的转换器

它表示MVC不知道使用哪个
转换器
从该服务返回REST响应。使用spring中提供的默认转换器

请在方法签名中添加注释
@ResposeBody


Artem,我不知道invokeChannel是单向的还是双向的,我想
DirectChannel
可以让你在不知道频道另一端是什么的情况下向它发送消息,是吗?如何将其配置为单向?我认为我的
webmvcconfiguer
确实覆盖了
HttpMessageConverter
以支持JSON负载。但我认为spring默认转换器应该仍然存在,也许我错了。当MVC启动时,我打印了消息转换器的数量,结果我只有1个,这是JSON。我切换到
extendMessageConvertes()
,这给了我7个转换器。还有一个问题,
DirectChannel
似乎将消息回送给发送消息的人,这是默认行为吗?我如何关闭它?我解决了它,我添加了一个不需要的输出通道,这就是为什么它会回响。我很高兴读到这一点!对不起,我不知怎么漏掉了你的问题。为此,我想请您共享您的集成配置。但现在它不重要了。你就是那个人!:-)Artem,我不知道invokeChannel是单向的还是双向的,我想
DirectChannel
可以让你在不知道频道另一端是什么的情况下向它发送消息,是吗?如何将其配置为单向?我认为我的
webmvcconfiguer
确实覆盖了
HttpMessageConverter
以支持JSON负载。但我认为spring默认转换器应该仍然存在,也许我错了。当MVC启动时,我打印了消息转换器的数量,结果我只有1个,这是JSON。我切换到
extendMessageConvertes()
,这给了我7个转换器。还有一个问题,
DirectChannel
似乎将消息回送给发送消息的人,这是默认行为吗?我如何关闭它?我解决了它,我添加了一个不需要的输出通道,这就是为什么它会回响。我很高兴读到这一点!对不起,我不知怎么漏掉了你的问题。为此,我想请您共享您的集成配置。但现在它不重要了。你就是那个人!:-)你是对的,我不正确的webMvcConfig删除了默认的MVC转换器。一旦我重新添加它们,它就会再次工作。你是对的,我不正确的webMvcConfig已经删除了默认的MVC转换器。一旦我把它们加回去,它又能工作了。