yhs0092 opened a new issue, #4426: URL: https://github.com/apache/servicecomb-java-chassis/issues/4426
## 现象 如果在 `HttpServerFilter` 的 `afterReceiveRequest` 方法中调用 `requestEx.getBodyBuffer()` 方法, 在 Java-Chassis 1.3 分支, `getBodyBuffer()`方法一定会返回一个对象, 即使是对于 GET 请求这种没有 body 的请求, 也能拿到一个空的 bodybuffer. 但在 Java-Chassis 2.8 分支, 如果请求本身没有body, 则 `getBodyBuffer()` 方法返回值变为 `null`. 涉及此场景的用户就会发现, 升级之后他们多了一些 NullPointerException 错误, 而这在使用 Java-Chassis 1.3 分支的时候并不存在. ## 代码分析 我们简要分析了一下 Java-Chassis 的相关源码, 发现变化点可能是 `org.apache.servicecomb.transport.rest.vertx.RestBodyHandler` 引入的. 在 Java-Chassis 1.3 分支, `RestBodyHandler`无论如何都会向 `HttpServerRequest` 中引入一个 `BHandler` 实例, 而这个 `BHandler` 始终会向`RoutingContext`中添加一个非null的 bodybuffer 对象. 但在 Java-Chassis 2.8 分支, `RestBodyHandler`会先判断请求是否有body, 如果没有, 则根本不会添加 `BHandler` 实例. 这种空指针异常通常会让用户比较迷惑, 因为从业务视角看来, 他们在升级 Java-Chassis 的过程中, 通常不会修改 `getBodyBuffer()` 上下文的代码,但是升级之后就是会突然多出一些空指针异常. 请问 Java-Chassis 能否在这里做一下兼容? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
