跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

IDEA 报警:未注解方法重写@NonNullApi 注解方法

对 Spring Boot 项目中因@NonNullApi 导致 IDEA 报警的问题提供了解决方案。主要涉及重写方法时需添加@NonNull 注解。提供了三种修复方式:为匿名内部类添加注解、使用 Spring 内置的 TextMessage 类、或补全所有参数注解。推荐使用 TextMessage 方案,因其代码简洁、符合规范且性能更优。

嘘发布于 2026/3/30更新于 2026/9/870 浏览

未注解的方法重写注解为 @NonNullApi 的方法

文章配图

解决方法

文章配图


这个错误是因为 Spring 框架在方法上使用了 @NonNullApi 注解,要求重写的方法参数也需要有相应的空值注解。在你的代码中,getPayload() 方法需要添加 @NonNull 注解。

以下是几种解决方案:

方案 1:为匿名内部类的方法添加注解(推荐)

@Component
@Slf4j
public class SessionWebSocketHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(@NonNull WebSocketSession session) throws IOException {
        session.sendMessage(new WebSocketMessage<>() {
            @Override
            @NonNull
            public Object getPayload() {
                return "WebSocket 连接成功";
            }

            @Override
            public int getPayloadLength() {
                return "WebSocket 连接成功".getBytes().length;
            }

            @Override
            public boolean isLast() {
                return true;
            }
        });
    }
}

方案 2:使用 Spring 提供的 TextMessage 类(更简洁)

package com.weiyu.handler;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.lang.NonNull;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;

@Component
@Slf4j
public class SessionWebSocketHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(@NonNull WebSocketSession session) throws IOException {
        // 使用 TextMessage 替代匿名内部类
        session.sendMessage(new TextMessage("WebSocket 连接成功"));
    }
}

方案 3:添加完整的参数注解

如果你坚持使用匿名内部类,确保所有重写的方法都有正确的注解:

@Override
public void afterConnectionEstablished(@NonNull WebSocketSession session) throws IOException {
    session.sendMessage(new WebSocketMessage<>() {
        @Override
        @NonNull
        public Object getPayload() {
            return "WebSocket 连接成功";
        }

        @Override
        public int getPayloadLength() {
            return "WebSocket 连接成功".getBytes().length;
        }

        @Override
        public boolean isLast() {
            return true;
        }
    });
}

推荐使用方案 2 的原因:

  1. 代码更简洁:使用 TextMessage 避免了复杂的匿名内部类
  2. 符合 Spring 设计:TextMessage 是 Spring 专门为文本消息提供的实现
  3. 避免注解问题:不需要处理复杂的注解配置
  4. 更好的性能:TextMessage 已经优化过,性能更好

使用方案 2 后,你的代码会更加简洁且符合 Spring 的最佳实践。

目录

  1. 未注解的方法重写注解为 @NonNullApi 的方法
  2. 解决方法
  3. 方案 1:为匿名内部类的方法添加注解(推荐)
  4. 方案 2:使用 Spring 提供的 TextMessage 类(更简洁)
  5. 方案 3:添加完整的参数注解
  6. 推荐使用方案 2 的原因:

更多推荐文章

查看全部
  • AI+游戏开发:使用 DeepSeek 构建贪吃蛇游戏
  • AI 绘画与摄影:ChatGPT、Midjourney 与文心一格工具解析
  • Stable Diffusion 提示词高阶用法实战:从精准控制到风格迁移
  • 前端加密 encrypt-labs 靶场实战:环境搭建与全关卡解析
  • Spring Cloud Nacos 服务注册与配置中心实战
  • Llama-Factory 训练进度条卡死排查与优化指南
  • 网络安全行业人才缺口与薪资水平深度解析
  • 5 个适用于生活与工作的 Python 自动化项目
  • Python + Bright Data MCP 实时抓取 Google 搜索结果实战
  • 机器人架构搭建核心准则:先论文论证,后工程落地
  • Meta:BackTranslation 与 IBM Self Alignment 技术解析
  • 硕士论文盲审前如何降低 AI 检测率及评委关注点分析
  • OpenClaw 配置飞书机器人教程
  • LLM 训练微调实战:基于 LLaMA-Factory 框架详解
  • AMD 显卡 AI 绘画:ComfyUI-Zluda 配置手册
  • Java AES 加密算法实现与模式详解
  • 滑动窗口算法专题:四道经典题目深度解析
  • VRChat 跨语言交流工具 VRCT 使用指南
  • Go 语言文件读写入门:os、bufio 与 ioutil 实战
  • AIGC 产品经理:定义、核心职责与 AI 产品经理的区别

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online