gpt4 book ai didi

java - Spring Integration + 过滤器 + 向 REST Controller 发送 400 错误请求

转载 作者:行者123 更新时间:2023-12-01 19:35:08 25 4
gpt4 key购买 nike

我有一个 REST Controller 类,它调用消息网关并发送一个订单以供 Spring Integration 流处理:

@MessagingGateway
public interface OrderGateway {

@Gateway(requestChannel = "orders.input")
void processOrderRequest(Order order);

}

如果订单有效,则会向 kafka 发送 2 个事件。如果订单无效,则会向 kafka 发送“rejected”事件,并向 REST Controller 类发送 400 Bad 请求,以便用户知道请求有问题。

除了向 Controller 发送回 400 Bad 请求的部分之外,我已经能够使此流程正常工作。

以下是我到目前为止已成功将事件发送到 kafka 的内容:

@Bean
public IntegrationFlow orders(KafkaTemplate<?, ?> kafkaTemplate) {
return f -> f
.<Order> filter(request -> orderValidator.isValid(request), fs -> fs.discardFlow(
df -> df
.transform(orderRejectedEventTransformer)
.handle( m -> Kafka.outboundChannelAdapter(kafkaTemplate).messageKey(this.properties.getMessageKey()) )
))
.publishSubscribeChannel(s -> s
.subscribe(fl -> fl
.transform(orderReceivedEventTransformer)
.handle( Kafka.outboundChannelAdapter(kafkaTemplate).messageKey(this.properties.getMessageKey()) )
)
.subscribe(fl -> fl
.transform(orderSuccessfulEventTransformer)
.handle( Kafka.outboundChannelAdapter(kafkaTemplate).messageKey(this.properties.getMessageKey()) )
)
);
}

我想我必须在某个地方抛出异常,但我完全不知道如何发送错误的请求响应。

提前致谢。

最佳答案

Spring MVC 带有一些默认配置,其中一部分是异常处理。它在 WebMvcConfigurationSupport 中看起来像这样:

/**
* A method available to subclasses for adding default
* {@link HandlerExceptionResolver HandlerExceptionResolvers}.
* <p>Adds the following exception resolvers:
* <ul>
* <li>{@link ExceptionHandlerExceptionResolver} for handling exceptions through
* {@link org.springframework.web.bind.annotation.ExceptionHandler} methods.
* <li>{@link ResponseStatusExceptionResolver} for exceptions annotated with
* {@link org.springframework.web.bind.annotation.ResponseStatus}.
* <li>{@link DefaultHandlerExceptionResolver} for resolving known Spring exception types
* </ul>
*/
protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers,
ContentNegotiationManager mvcContentNegotiationManager) {

您可能没有任何@ExceptionHandler,也可能不会使用@ResponseStatus抛出自定义异常,但DefaultHandlerExceptionResolver可能会执行以下操作:给你的窍门。

要将 400 Bad request 发送回客户端,您需要抛出 HttpMessageNotReadableException

当被拒绝时,您必须与 Kafka 的 .handle() 并行抛出此类异常。我的意思是 publishSubscribeChannel() 应该很适合这里。

关于java - Spring Integration + 过滤器 + 向 REST Controller 发送 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59228749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com