【发布时间】:2019-05-02 10:17:10
【问题描述】:
我有一个简单的 getmapping:
@GetMapping(value = "{user}")
public String edit(@PathVariable User user, Model model) {
model.addAttribute("user", user);
return "userEdit";
}
在我看来,我只提供实体 ID:
<tr>
<td>${user.name}</td>
<td><a href="/user/${user.id}">Edit</a></td>
</tr>
最后在我的数据库中我有这个实体:
@Entity
@Table(name = "users")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}
但是当我尝试使用我的控制器时,我得到了这个异常:
出现意外错误(类型=错误请求,状态=400)。失败的 将“java.lang.String”类型的值转换为所需类型 'com.newtwitter.model.User';嵌套异常是 org.springframework.core.convert.ConversionFailedException: 失败 从类型 [java.lang.String] 转换为类型 [@org.springframework.web.bind.annotation.PathVariable com.newtwitter.model.User] 为值 '1';嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:提供 com.newtwitter.model.User 类的错误类型的 ID。预期的: 类 java.lang.Long,得到类 java.lang.Integer;嵌套异常是 java.lang.IllegalArgumentException:为 com.newtwitter.model.User 类。预期:类 java.lang.Long,得到 类 java.lang.Integer
我可以修复它吗?
【问题讨论】:
-
您无法将用户值读取为路径变量中的“用户”类型。尝试将类型更改为 String 或 long
-
您可以将用户 ID 放在路径变量上,而不是整个 User 对象上。
-
如果启用了 Spring Data Web 扩展,您可以指定一个用户实例,如我的回答中所述。
-
你可以使用 Converter 将用户 id 转换为用户对象,或者从路径变量中获取 id,然后从数据库中获取用户
标签: java spring-mvc spring-boot jpa spring-data