在Spring启动时无法使用方法findOne()

时间:2016-04-14 03:18:44

标签: java spring

我的项目是关于用户管理器网站。

我是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>{
}

6 个答案:

答案 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>

这很有帮助