You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin @Endpoint引发静态资源加载失败与405请求方法不支持问题

Vaadin 21 + Spring Boot 2.5.4: 405错误与静态资源加载失败(@Endpoint与Spring MVC注解冲突)

问题背景

在基于Vaadin 21、Java 16、Spring Boot 2.5.4的项目中集成推送通知时,添加带有@Endpoint注解的MessageEndpoint类后出现以下问题:

  • 系统抛出org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported异常
  • 浏览器控制台显示405错误
  • /resources目录下的图标、图片无法加载

已尝试移除@Endpoint(推送功能失效)、调整Spring Security配置(无效)。

问题根源

核心冲突在于Vaadin Connect的@Endpoint注解与Spring MVC的控制器注解重复绑定路由:

  • @Endpoint是Vaadin Connect用于定义后端端点的专属注解,会自动处理路径映射与请求分发逻辑
  • 同时添加@RestController、@RequestMapping等Spring MVC注解后,Spring会将该类视为MVC控制器,与Vaadin Connect的路由规则重叠,导致:
    1. 静态资源请求被误路由到/connect/MessageEndpoint路径下,而该路径仅定义了POST方法,触发405错误
    2. Vaadin Connect的端点处理逻辑被Spring MVC干扰,引发请求方法不支持异常

解决方案

1. 移除Spring MVC相关注解

删除@RestController、@RequestMapping、@PostMapping、@ResponseBody,仅保留Vaadin Connect的@Endpoint和@AnonymousAllowed,让Vaadin Connect全权负责端点路由。

2. 简化参数处理逻辑

直接使用DTO类接收请求参数,避免手动用ObjectMapper解析,减少出错概率。

3. 确认Vaadin Connect配置

在application.properties中确认vaadin.connect.enabled=true(默认已开启,可按需检查)。

修改后代码示例

@Endpoint
@AnonymousAllowed
public class MessageEndpoint {

    // Vaadin Connect默认将方法名作为动作,对应POST请求到/connect/MessageEndpoint/getPublicKey
    public String getPublicKey() {
        return PushNotificationService.INSTANCE.getPublicKey();
    }

    // 直接用DTO接收订阅信息,userGuid作为请求参数传递
    public void subscribe(MSubscription subscription, @RequestParam String userGuid) {
        PushNotificationService.INSTANCE.subscribe(subscription, userGuid);
    }

    public void unsubscribe(MSubscription subscription, @RequestParam String userGuid) {
        PushNotificationService.INSTANCE.unsubscribe(subscription, userGuid);
    }
}

补充说明

  • 若需要自定义动作名称,可在方法上添加@ConnectAction("custom-name")注解
  • 前端调用端点时,需使用Vaadin Connect的客户端API(如ConnectClient),确保请求格式符合规范
  • 移除Spring MVC注解后,静态资源的路由会恢复正常,因为Spring不再拦截/resources相关请求

内容的提问来源于stack exchange,提问作者ALexander Lazar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:15:17