我的项目是关于用户管理器网站。
我是Spring和Java的新手。
这是我的代码:在UserController中
@RequestMapping(value="/users/{name}",method = RequestMethod.GET)
public User showUser(@PathVariable("name") String name){
return userService.findUser(name);
}
在UserService中:
public User findUser(String name){
return userRepository.findOne(name);
}
当我转到链接时在邮递员中:http://localhost:8080/users/hunghip4(hunghip4是我创建的用户)
{
"timestamp": 1460570912129,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.dao.InvalidDataAccessApiUsageException",
"message": "Provided id of the wrong type for class com.uet.dhqg.usermanage.model.User. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.uet.dhqg.usermanage.model.User. Expected: class java.lang.Integer, got class java.lang.String",
"path": "/users/hunghip4"
}
用户模型:
@Entity
@Table(name="user")
public class User extends HypermediaLinks {
@Id
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="pass")
private String pass;
public int getId(){
return id;
}
public String getName(){
return name;
}
public void serName(String name){
this.name = name;
}
public String getPass(){
return pass;
}
public void serPass(String pass){
this.pass = pass;
}
}
UserRepository:
@Repository
public interface UserRepository extends CrudRepository<User,String>{
}
答案 0 :(得分:7)
您的UserRepository
定义为CrudRepository<User,String>
。其中User
是类型,String
是id的类型。但是,您的User
类的id字段的类型为int
,而非String
类型。
首先修复您的UserRepository
,使其成为User
的正确代表。
public interface UserRepository extends CrudRepository<User, Integer> {}
接下来,创建一个按名称查找User
的方法。
public User findByName(String name);
然后从您的控制器而不是findOne
调用此方法。 findOne
用于查找基于ID的实体,而不是实体的任何随机字段。
答案 1 :(得分:0)
如异常所示,您将用户名传递给findOne方法。但是根据Spring文档中的方法签名,方法findOne期望将作为Integer的ID作为其参数。传递用户ID而不是名称。
答案 2 :(得分:0)
将您的存储库定义更改为
findOne
您的用户ID数据类型为int,因此您的存储库ID也应为int。使用此替换User
方法也接受整数数据类型,因为{{1}} id为。
答案 3 :(得分:0)
将上述工件的版本更改为pom文件中的1.4.0.RELEASE 做maven更新项目。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
答案 4 :(得分:0)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
更新Pom.xml并导入Maven更改
答案 5 :(得分:-2)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
这很有帮助