【问题标题】:Can't use method findOne() in Spring boot无法在 Spring Boot 中使用方法 findOne()
【发布时间】:2016-08-05 10:14:45
【问题描述】:

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

我是 Spring 和 Java 的新手。

这是我的代码:在 UserController 中

@RequestMapping(value="/users/{name}",method = RequestMethod.GET)
public User showUser(@PathVariable("name") String name){
    return userService.findUser(name);
}

在用户服务中:

 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;
}

}

用户存储库:

@Repository
public interface UserRepository extends CrudRepository<User,String>{
}

【问题讨论】:

  • 在此处添加User 类的代码。
  • 我们需要UserRepository 定义。

标签: java spring


【解决方案1】:
//Create a BookMarkRepsoitory extending the JpaRepo
```import org.springframework.data.jpa.repository.JpaRepository;
public interface BookMarkRepository
        extends JpaRepository<Book, String> {
}
```

then in your class to access one book or any value use this method
```
 @Override
                    public UserDetails loadBookBookname(String bookName)
                            throws UsernameNotFoundException {
                        Optional<Book> book= readerRepository.findById(bookName);
                        if (book.isPresent()){
                            return book.get();
                        }
                        else return null;
                    }```

【讨论】:

    【解决方案2】:
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
    

    很有帮助

    【讨论】:

    • 提问者应该添加的不仅仅是发布代码 sn-p,请考虑添加对问题的解释、如何解决问题以及建议的解决方案解决问题的原因。
    【解决方案3】:
    <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 更改

    【讨论】:

      【解决方案4】:

      在 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>
      

      【讨论】:

        【解决方案5】:

        将存储库定义更改为

        public interface UserRepository extends CrudRepository<User,Integer>
        

        您的用户 ID 数据类型是 int,因此您的存储库 ID 也应该是 int。使用此替换 findOne 方法也接受整数数据类型,因为 User id 是。

        【讨论】:

          【解决方案6】:

          您的UserRepository 定义为CrudRepository&lt;User,String&gt;。其中User 是id 的类型,String 是id 的类型。但是,您的 User 类具有 int 类型的 id 字段而不是 String 类型。

          首先修复您的UserRepository 以正确表示您的User

          public interface UserRepository extends CrudRepository<User, Integer> {}
          

          接下来创建一个方法来按名称查找您的User

          public User findByName(String name);
          

          并从您的控制器而不是findOne 调用它。 findOne 用于根据 ID 而非实体的任何随机字段查找实体。

          【讨论】:

            【解决方案7】:

            正如异常所暗示的,您将用户名传递给 findOne 方法。但根据 Spring 文档中的方法签名,方法 findOne 需要作为参数的整数 ID。传递用户 ID 而不是名称。

            【讨论】:

            • 我试过但它说“在 CrudRepository 中不能应用于 (int)”
            • 当您向 findOne 方法提供整数 ID 时,您会得到什么异常?请提供完整的异常日志。
            猜你喜欢
            • 1970-01-01
            • 2019-10-13
            • 2018-08-25
            • 2021-12-20
            • 1970-01-01
            • 1970-01-01
            • 2018-07-17
            相关资源
            最近更新 更多