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

SpringBoot中通过用户名查询Admin数据渲染页面跳错误页问题

问题描述

尝试通过管理员用户名从数据库获取管理员详情,但始终被重定向到错误页。预期是当URL中包含数据库已有的管理员用户名时,Thymeleaf模板能渲染出对应数据,但实际未实现。

相关代码

管理员控制器

@GetMapping("/admin-portal/{username}")
public String adminPortal(@PathVariable("username") String username, Model model){
    Optional<Admin> admin = Optional.ofNullable(adminservice.getAdminByUsername(username));
    if (admin.isPresent()){
        model.addAttribute("admin", admin.get());
        return "admin/admin-portal";
    }
    return "error";
}

管理员仓库

public interface AdminRepository extends JpaRepository<Admin, Long>{

    Admin findByUsername(String username);

}

管理员实体类

@Data
@Entity(name = "Admin")
@Table
public class Admin {
    @Id
    @SequenceGenerator(
            name = "admin_sequence",
            sequenceName = "admin_sequence",
            allocationSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "admin_sequence"
    )
    private long id;
    private String username;
    private String password;
    private String role;

    public Admin() {
    }

    public Admin(long id, String username, String password, String role) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.role = role;
    }

//    Constructor without Id
    public Admin(String username, String password, String role) {
        this.username = username;
        this.password = password;
        this.role = role;
    }
}

管理员服务类

public Admin getAdminByUsername(String username){
    return adminRepository.findByUsername(username);
}

Thymeleaf模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Admin Portal Page</title>
</head>
<body>
<div class="container">
    <tr>
        <td>Username:</td>
        <td th:text="${admin.username}"></td>
        <td>Password:</td>
        <td th:text="${admin.password}"></td>
    </tr>
</div>
</body>
</html>

排查与解决建议

  • 确认数据库中存在目标用户名的管理员记录,注意大小写匹配:部分数据库(如PostgreSQL)默认区分大小写,若数据库中用户名是AdminUser,URL传入adminuser会查询不到
  • 调试查询逻辑:在getAdminByUsername方法中添加日志,输出传入的username和查询结果,确认是否返回null
  • 检查JPA方法映射:若实体类的username字段使用了@Column指定数据库列名,确保方法名findByUsername对应实体类的字段名(而非数据库列名)
  • 验证URL参数:确认URL中的用户名参数没有编码问题或多余字符,比如空格、特殊字符未转义
  • 修复模板HTML结构:<tr>标签必须包裹在<table>内,否则浏览器渲染会异常(虽然不影响重定向,但会导致数据无法正常显示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:01:36