Ali*_*Ali 4 java validation spring spring-mvc rabbitmq
我正在使用 Spring Boot 框架。我想通过 RabbitMQ 将一个对象从一个服务发送到另一个服务,如下所示:
服务一:
rabbitTemplate.convertAndSend("queue", createAccountRequestMessage);
Run Code Online (Sandbox Code Playgroud)
服务乙:
@RabbitListener(queues = "queue")
public void onAccountRequested(@Valid CreateAccountRequestMessage createAccountRequestMessage, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG, long tag) throws IOException
{
}
Run Code Online (Sandbox Code Playgroud)
在CreateAccountRequestMessage课堂上,我定义了一些验证注释,例如@NotEmpty、@NotNull等,但是当我从服务 A 向服务 B 发送错误消息时,@Valid注释不起作用并且CreateAccountRequestMessage在调用onAccountRequested方法之前未验证对象。
小智 7
您需要在DefaultMessageHandlerMethodFactory.
@Autowired
SmartValidator validator;
@Bean
public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setValidator(this.validator);
return factory;
}
Run Code Online (Sandbox Code Playgroud)
然后,您还需要与@Payload注释一起指定 @Valid注释。
@RabbitListener(queues = "queue")
public void onAccountRequested(@Valid @Payload CreateAccountRequestMessage
createAccountRequestMessage, Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG, long tag) throws IOException
{
}
Run Code Online (Sandbox Code Playgroud)
现在MethodArgumentNotValidException将被抛出并且消息将被丢弃,或者您可以将消息发送到死信交换。
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |