Spring Boot 3.1.5 - 无法将 java.lang.string 类型的值转换为所需的 UserId 类型

问题描述 投票:0回答:1

我正在完成 Wim Deblauwe 的书“Taming Thymeleaf”(第 314 页)。我正在使用 Spring Boot 3.1.5、SpringDataJPA 映射 MySQL 数据库。虽然一切似乎都工作正常(VSCode 中没有代码警告),但我现在遇到了记录编辑功能的问题。当我单击用户记录列表右侧的用户编辑链接时,我没有到达用户记录屏幕,而是收到 404 错误和 Spring Boot 错误: Failed to conversion value of type 'java.lang.String ' 到所需类型'com.mango.aquarius.user.UserId'。请参阅随附的屏幕来查看我的代码:

  • 当我将鼠标悬停在用户上时,用户记录列表显示编辑链接 user/19(Chrome 左下角)

新按钮有效(这很重要,因为编辑表单继承自创建表单):

单击编辑链接时会显示 Spring Boot 错误并导致 404 错误(请参阅终端窗口中的屏幕底部):

单击编辑链接时会导致白标签错误页面:

代码不显示任何警告,并且仅当我单击编辑链接时 Spring Boot 才会显示错误。

由于错误是由类型转换引起的,我首先访问我的数据库(MySQL)来检查 tab_users 结构。它确认主键 id 是一个整数:int(11) 正如预期的那样。然后我检查以下代码:

  • tab_users表结构

  • User:实体声明主键为Integer

  • 用户控制器

  • 编辑用户参数

  • 编辑表单数据

  • 用户服务

  • 用户服务实现

  • UserId:这里我为 UserId 创建了一个值组件,以区别于通用 Id,以免在代码中的其他地方处理错误的 Id 值。不确定这是否是问题的原因...

spring-boot spring-mvc spring-data-jpa thymeleaf
1个回答
0
投票

在控制器中声明路径变量时,需要指定确切的数据类型。但是,

  • UserContoller 中:您将 'id' 声明为 UserId,它是一个对象。因此,将其更改为 Integer 就可以了。

澄清一下:在下图中,

您编写的代码是:

public String editUserForm(@PathVariable("id") UserId id, ...

这里需要将代码更改为:

public String editUserForm(@PathVariable("id") Integer id, ...

由于 URL 中传递的值是一个 Integer

注意:POST 映射中也进行相同的更改。

© www.soinside.com 2019 - 2024. All rights reserved.