Spring Boot 3宠物MVC应用Whitelabel Error Page问题求助
问题分析与解决方案
1. 控制器类级别@RequestMapping配置错误
你的PetController类上的@RequestMapping指定了method = RequestMethod.GET,这会强制类内所有请求映射继承该方法限制,不仅会导致@PostMapping方法完全无法匹配请求,也不符合Spring Boot 3的最佳实践。
修复方式:
修改类上的注解,移除method参数,让方法级别的@GetMapping/@PostMapping各自管理请求方法:
@Controller @RequestMapping("/pets") public class PetController { // 原有代码保持不变 }
2. Pet实体类缺少Getter/Setter方法
你的Pet类仅定义了setId方法,其余属性(name、kind、sex、vaccinated)无Getter/Setter:
- Thymeleaf模板需要通过Getter方法访问模型属性,无Getter会导致模板渲染失败
- JPA操作实体时也依赖Getter/Setter完成数据读写,可能引发持久化异常
修复方式:
为所有属性添加Getter/Setter方法,或使用Lombok的@Data注解简化代码(需先引入Lombok依赖):
package com.muskan.model; import jakarta.persistence.*; @Entity @Table(name = "pets") public class Pet { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Enumerated(EnumType.STRING) private PetKind kind = PetKind.DOG; @Enumerated(EnumType.STRING) private PetSex sex = PetSex.FEMALE; private boolean vaccinated; // 所有属性的Getter/Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public PetKind getKind() { return kind; } public void setKind(PetKind kind) { this.kind = kind; } public PetSex getSex() { return sex; } public void setSex(PetSex sex) { this.sex = sex; } public boolean isVaccinated() { return vaccinated; } public void setVaccinated(boolean vaccinated) { this.vaccinated = vaccinated; } }
注意:boolean类型属性的Getter方法命名为isVaccinated,符合JavaBean规范。
3. 确认Spring Boot主类的包扫描范围
Spring Boot默认扫描主类所在包及其子包的组件。若主类不在com.muskan包下,com.muskan.controller下的PetController不会被自动扫描,导致请求映射不存在。
修复方式:
- 确保主类包为
com.muskan:
package com.muskan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class PetApplication { public static void main(String[] args) { SpringApplication.run(PetApplication.class, args); } }
- 若无法修改主类包,在主类上指定扫描包:
@SpringBootApplication @ComponentScan(basePackages = "com.muskan") public class PetApplication { // 原有代码 }
4. 确认Thymeleaf依赖已正确引入
在Gradle的build.gradle中,确保引入Thymeleaf starter依赖:
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' }
缺少该依赖会导致Spring Boot无法识别Thymeleaf模板,触发视图找不到的白标错误。
5. 验证模板文件路径与命名
确认模板路径为src/main/resources/templates/pets/list.html和src/main/resources/templates/pets/form.html,路径与控制器返回的视图名("pets/list"、"pets/form")完全匹配。
按上述步骤修复后,重启应用,访问http://localhost:8080/pets即可正常显示宠物列表页面。
内容的提问来源于stack exchange,提问作者Jaspreet Singh

