代码之家  ›  专栏  ›  技术社区  ›  PatPanda

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

  •  1
  • PatPanda  · 技术社区  · 4 年前

    关于如何拥有“控制器”级别的小问题 @ExceptionHandler ,但请给我一杯咖啡。

    有点天真,我试着有一个控制器级别 ExceptionHandler

        @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不支持 @异常处理程序 我需要通过另一个机制?

    谢谢你的帮助。

    1 回复  |  直到 4 年前
        1
  •  1
  •   aran    4 年前

    我相信同等的是 MessageExceptionHandler 如果 RSocket

    WebSockets Exception handling

    就像普通的springmvc一样,我们也可以处理异常。 然而, 而不是使用@ExceptionHandler 现在 注释。


    所以像这样的方法是可行的:

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

    请注意 是一种在WebSockets上工作的协议,但也可以使用纯TCP等。在这个特定的例子中,似乎你的RSocket在WS之上,所以 @MessageExceptionHandler @ExceptionHandler .