RouterFunction:需要非空类型参数
它到底想让我做什么?我如何在不屏蔽警告的情况下确保不再收到警告?
需要一个非空类型参数
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
@Configuration
public class WebConfig {
@Bean
public RouterFunction<ServerResponse/*warning here*/> route() {
return RouterFunctions
.route(GET("/test"), req -> ServerResponse.status(HttpStatus.OK).build());
}
}
Spring Boot 4, WebFlux, IntelliJ IDEA Community 2024.2.4.
解决方案
这个警告来自IntelliJ IDEA针对JSpecify的可空性检查。从Spring Framework 6开始,包 org.springframework.web.reactive.function.server 已被标注为 @NullMarked,这使得 RouterFunction<T> 上的类型参数默认为非空。该检查随后将任何未显式注解为 @NotNull 的类型参数标记为可疑——即便像 ServerResponse 一样,在Spring 6内部它自身也是非空的。这种误报行为在 IDEA-382938(仍未解决)中被跟踪。
有两种方式在不进行 @SuppressWarnings 的情况下让它静默:
1.为类型参数添加注解:
import org.jetbrains.annotations.NotNull;
@Bean
public RouterFunction<@NotNull ServerResponse> route() {
return RouterFunctions.route(GET("/test"),
req -> ServerResponse.status(HttpStatus.OK).build());
}
这正是该检查希望你编写的内容。 一旦你有几个这样的Bean,冗长的问题就会显现。
2.禁用特定的检查选项:
在 Settings | Editor | Inspections 中,找到 @NotNull/@Nullable problems(在 Java | Probable bugs | Nullability problems 下)并取消勾选 "Report non-annotated type arguments instantiating non-null type parameter"。 其余的可空性检查保持启用。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。