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

Spring Boot 4内嵌Tomcat 11.0.15无法引用嵌套枚举类的问题排查与解决咨询

Spring Boot 4内嵌Tomcat 11.0.15无法引用嵌套枚举类的问题排查与解决咨询

在升级到Spring Boot 4(即Spring Boot 3.5及后续版本)之前,我们通过内嵌Tomcat服务器运行Web应用时,JSP页面可以正常引用嵌套枚举类,具体实现如下:

问题重现代码

Java实体类(包含嵌套枚举)

package application.domain;

@Entity
public class Form {
  public enum Type {
    STANDARD("Standard"),
    ADVANCED("Advanced");

    private final String label;

    Type(String label) {
      this.label = label;
    }

    public String getLabel() {
      return label;
    }
  }

  @Id
  @GeneratedValue
  private Long id;

  private String title;
  
  // 省略其他属性与方法
}

对应的JSP视图代码

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@page import="application.domain.Form.Type" %>

<select name="type" class="form-control">
  <c:forEach var="type" items="${Type.values()}">
    <option value='${type}' ${form.type == type ? 'selected' : ''}>${type.label}</option>
  </c:forEach>
</select>

升级后出现的问题

但在升级到Spring Boot 4.0.2(配套Tomcat 11.0.15)之后,JSP中的${Type.values()}表达式返回空值——没有任何报错信息,只是无法解析出枚举值,导致下拉选框无选项。

需要补充的细节:

  • 将Spring Boot应用打包成WAR部署到独立的Tomcat 11服务器时,该功能是正常工作的
  • 此前从Tomcat 10.1.41版本开始,JSP EL已经支持这种嵌套类的访问方式,相关修复已有官方记录

求助问题

  • 从Spring Boot 3.5到4.x(或Tomcat 10.1.x到11.x)的哪些变更导致了这个问题?
  • 除了将嵌套枚举重构为顶级类之外,有没有其他的解决办法?

备注:内容来源于stack exchange,提问作者Brice Roncace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:14:28