SpringBoot中amqp MessageConverter的GSON实现

时间:2019-03-02 18:02:11

标签: java json spring-boot gson amqp

我正在使用一个简单的HelloWorld应用程序在RabbitMQ Spring Boot应用程序中侦听JSON消息。我想使用/配置GSON消息转换器,以便可以将其作为JSON映射到java对象接收。

例如,如果我想使用Jackson API将Json转换为Java,我将仅添加以下配置,我的监听器将确保将以JSON格式发送的消息转换为其相应的POJO表示形式。

@Bean
public MessageConverter jackson2MessageConverter() {
return new Jackson2JsonMessageConverter();
}

下面的侦听器在解组到java对象后仅打印消息。

@RabbitListener(queues = "some.rabbitmq.queue")
public void receiveMessage(final CustomJavaPojo message) {
    log.info("Received message as specific CustomJavaPojo: {}", message.toString());
}

由于我已在同一应用程序的其他部分中使用GSON进行HTTP消息转换,所以我也想在该应用程序的消息传递部分中使用相同的gson库。但是,我找不到我可以使用的任何实现。

我提到了spring amqp converter package for various implementation,但没有发现gson的变化。

是编写自己的MessageConverter接口的GSON实现的唯一方法吗?

或者,作为替代,我收到消息是通用的

@RabbitListener(queues = MessagingApplication.QUEUE_GENERIC_NAME)
public void receiveMessage(final Message message) {
    log.info("Received message as generic: {}", message.toString());
}

,然后使用gsonjson字符串中获取Java对象

Gson gson = new Gson();
String json = new String(message.getBody(), StandardCharsets.UTF_8);
CustomJavaPojo result = gson.fromJson(json, CustomJavaPojo.class);

类似地,要使用以下rabbitTemplate配置发送消息,我将需要someImplementationOfGsonMessageConverter(),该消息似乎不可用。

@Bean
public AmqpTemplate rabbitTemplate(final ConnectionFactory connectionFactory) {
  final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
rabbitTemplate.setMessageConverter(someImplementationOfGsonMessageConverter());
return rabbitTemplate;
}

因此,我将无法使用下面的convertAndSend方法

rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, customJavaPojo);

因此,您是否建议其他可用的替代方法是使用

rabbitTemplate.produce()方法,并使用gson将pojo转换为json。

有什么想法吗?

0 个答案:

没有答案