微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请问RSocket世界中@ExceptionHandler的等价物是什么?

如何解决请问RSocket世界中@ExceptionHandler的等价物是什么?

关于如何拥有“控制器”级别 @ExceptionHandler 的小问题,但对于 RSocket,请。

有点天真,我尝试在我的 RSocket 应用程序中使用具有以下内容的控制器级别 ExceptionHandler。 (就像在任何其他 MVC/Webflux 应用程序中一样)

    @ExceptionHandler
    public Mono<ResponseEntity<String>> exception(final Exception exception) {
        return Mono.just(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(exception.getMessage()));
    }

到目前为止,我还没有看到这种“捕捉”任何东西。因为我一直看到这个奇怪的错误

io.netty.util.IllegalReferenceCountException: refCnt: 0
    at io.rsocket.util.ByteBufPayload.ensureAccessible(ByteBufPayload.java:208) ~[rsocket-core-1.1.0.jar:na]
    at io.rsocket.util.ByteBufPayload.sliceData(ByteBufPayload.java:155) ~[rsocket-core-1.1.0.jar:na]
    at org.springframework.messaging.rsocket.PayloadUtils.retainDataAndReleasePayload(PayloadUtils.java:54) ~[spring-messaging-5.3.2.jar:5.3.2]
    at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.retainDataAndReleasePayload(MessagingRSocket.java:184) ~[spring-messaging-5.3.2.jar:5.3.2]
    at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[reactor-core-3.4.1.jar:3.4.1]

所以我在想,是我做错了,还是 RSocket 不支持 @ExceptionHandler 而我需要通过其他机制?

感谢您的帮助。

解决方法

如果 RSocket 运行在 websockets 上,我相信等效的是 MessageExceptionHandler

WebSockets Exception handling

就像普通的 Spring MVC 一样,我们也可以处理异常。 然而,现在我们不使用@ExceptionHandler注解 必须使用@MessageExceptionHandler 注释。


所以这样的事情会起作用:

@MessageExceptionHandler
public Mono<ResponseEntity<String>> exception(final Exception exception) 
{
    return Mono.just(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                                    .body(exception.getMessage()));
}

请注意,RSocket 是一种通过 WebSocket 工作的协议,但也适用于普通 TCP 等。在这种特定情况下,似乎您的 RSocket 超过了 WS,因此 @MessageExceptionHandler 是正确的注释(不是 rsocket,而是充当 websocket)。如果通过 TCP 运行,您可能必须使用旧的 @ExceptionHandler

编辑 -- 正如罗森的评论所说,MessageExceptionHandler 和使用的协议之间没有这种联系,所以请忽略上面的文字! em>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。