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
相关产品推荐
相关产品推荐

