我的项目是关于用户管理器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>
这对很有帮助