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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:43:14