String MessageTemplate是否导致MVC控制器中未找到转换器异常?
我正在将消息从RESTAPI发送到SI消息通道,该通道委托给发送消息适配器。消息适配器向TCP客户端发送消息。无需返回/响应任何内容。我的TCP客户端成功接收到消息,但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
@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
overridesList错误消息:
未找到类型为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转换器。一旦我把它们加回去,它又能工作了。