我正在试验 Spring 4 WebSocket STOMP 应用程序。有没有办法明确指定处理程序产生的返回消息的内容类型?默认情况下,下面的处理application/json
程序由相应的消息转换器生成和处理。
@Controller
public class ProductController {
@MessageMapping("/products/{id}")
public String getProduct(@DestinationVariable int id) {
return getProductById(id);
}
}
我正在寻找类似@RequestMapping(produces = "text/xml")
Spring MVC 的东西。
更新(回复罗森的回答):
理想情况下,我希望能够根据用户的要求返回两种格式。但如果我必须选择,我会说 XML 而几乎从不说 JSON(XML 只是一个例子,我们使用二进制格式)。我采用了您建议的第二种方式 - 配置自定义转换器而不是默认转换器。
- 我已经实现了自定义
MessageConverter
扩展AbstractMessageConverter
。在构造函数中,我注册了适当的受支持的 MimeType。 - 然后我通过覆盖
WebSocketMessageBrokerConfigurer
's注册了我的自定义转换器configureMessageConverters
,并false
从该方法返回以不添加默认转换器。 - 一旦我的控制器返回值,我就会在
SendToMethodReturnValueHandler
's中获得 NPEpostProcessMessage
。发生这种情况是因为CompositeMessageConverter
仅包含一个转换器 - 我的自定义转换器。但我的转换器未能AbstractMessageConverter
通过supportsMimeType
检查并返回。这会导致.AbstractMessageConverter
toMessage
null
null
postProcessMessage
作为解决方法,我可以application/json
为我的自定义转换器注册额外的默认 MimeType。但它看起来对我来说太脏了。