当前位置: 首页 > 知识库问答 >
问题:

如何为spring消息传递、web套接字@destinationvariable或jms@header注册自定义转换器

束阳旭
2023-03-14

现在,我已经有了完全适用于http端的自定义转换器,例如@RequestParam或@PathVariable,但是在websocket控制器方法上进行相同的转换会引发ConverterNotFoundException

我有一个自定义转换器,将字符串转换为用户

public class StringToUserConverter implements Converter<String,User>{
    @Autowired UserDAO userDAO;

    @Override
    public User convert(String id) {
        return  userDAO.getUser(Integer.parseInt(id));
    }
}

在我的http控制器中,这与预期的工作方式完全一致,在这里我可以传递一个id,并将其自动转换为domain类

public String myControllerMethod(@RequestParam User user)
@MessageMapping("/users/{user}")
@SendTo("/users/greetings")
public String send(@DestinationVariable User user) {
    return "hello"
}

那么,如何注册自定义转换器或自定义ConversionService,使其像已经为http控制器所做的那样为web套接字工作

共有1个答案

卫博
2023-03-14

因此,现在我在JmsListener方法的@Header注释中遇到了同样的问题。

同样的想法,@header User User抛出ConverterNotFound异常。

@JmsListener(destination = "testTopic")
public void testJmsListener(Message m, @Header User user)..

在这里,我试图传递消息头上的用户id,并让spring转换它,但没有用,只支持基本的默认转换,如字符串或数字。

 类似资料:
  • 使用用于web套接字消息传递的Stomp broker中继,我可以订阅目标。这将创建一个代理订阅,并接收系统中的某些内容为此代理目标触发的所有消息,这将在系统中发生某些事件时发生。 我可以订阅一个目标,将调用带有的控制器方法,并且返回值仅在该套接字上作为消息发送回。据我所知,这是唯一的消息,将永远发送此订阅。 有没有一种方法可以将其合并到一个订阅中,即为某个目的地创建一个代理订阅,并触发一些直接将

  • 我在使用spring-jms模块转换来自RabbitMQ的消息时遇到了一些问题。以前,我使用Rest APIendpoint发送消息,该endpoint将消息发送到RabbitMQ队列,并使用@JMSListener方法处理它。 在内部,这种行为添加了一个字段来确定Java类型,由Spring库管理。但是,现在我想避免Rest API调用,因为它不是必需的,而且我可以直接将消息发送到RabbitM

  • 为什么它不能与和Java配置一起工作?为什么它与一起使用?

  • spring XML中的jmsTemplate定义: 有人对问题有什么建议吗/关于如何实现延迟消息传递的其他想法?谢了!

  • 我是新来的Spring Boot。在我的控制器中,我使用s作为。缺省情况下,在传递无效的时,Spring返回。 当客户端传递一个无效的时,我想抛出一个自定义的,这样我就可以使用这个异常返回一个自定义的错误。 我试图注册一个定制的(实现)。 为了注册这个组件,我将这个转换器添加到springs。使用。 我还尝试使用而不是这里提到的:Spring没有使用mongo定制转换器 我尝试过的其他解决方案是:

  • Spring JMS中的类具有setter方法,它允许提供我们想要的任何转换器。 对于带注释的消息侦听器,这很有意义,因为我们可以直接定义 spring将负责将消息转换并传递给这个侦听器。 因此,这对于带注释的听者来说显然是有意义的。我的问题是,设置消息转换器对非注释消息侦听器有用吗?类似于 从我在docs/javadocs中的搜索和对源代码的有限理解来看,我认为为这种情况设置消息转换器是没有帮助