不能在 Spring 引导中使用方法 findOne()



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

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

UserRepository:

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

您的UserRepository定义为CrudRepository<User,String>。其中User是类型,String是id的类型。但是,您的User类有一个类型为int而非String的id字段。

首先,将UserRepository固定为User的正确表示。

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

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

public User findByName(String name);

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

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

将存储库定义更改为

public interface UserRepository extends CrudRepository<User,Integer>

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

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

//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;
                    }```
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>

这对很有帮助

最新更新