RouterFunction:需要非空类型参数

后端开发 2026-07-09

它到底想让我做什么?我如何在不屏蔽警告的情况下确保不再收到警告?

需要一个非空类型参数

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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章