java - Springboot UnsatisfiedDependencyException?
问题描述
我正在使用 Spring Boot 设置一个基本的 REST,但我遇到了一些我不知道如何修复的错误。
希望你们能帮助我:)
我已经尝试了一些注释修复,但没有奏效......您可以在下面找到我的代码。也许依赖关系不正确?
用户控制器:
package com.spring.timelybackend.controllers;
import com.spring.timelybackend.model.Auth;
import com.spring.timelybackend.model.User;
import com.spring.timelybackend.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
private Auth auth = new Auth();
private User user = new User();
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Auth login(@RequestBody User _user) {
try {
auth = userService.login(_user.getUsername(), _user.getPassword());
return auth;
} catch (Exception e) {
auth = new Auth();
return auth;
}
}
@CrossOrigin(origins = "http://localhost:4200")
@GetMapping("/{userId}")
public User getUserById(@PathVariable int userId) {
try{
user = userService.getUserById(userId);
return user;
}
catch (Exception e){
user = new User();
return user;
}
}
}
存储库:
package com.spring.timelybackend.repository;
import com.spring.timelybackend.model.Auth;
import com.spring.timelybackend.model.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
@Service
public interface UserRepository extends CrudRepository<User, Integer> {
Auth login(String username, String password);
User findUserByUsername(String username);
User getUserById(Integer user_id);
}
服务:
package com.spring.timelybackend.services;
import com.spring.timelybackend.model.Auth;
import com.spring.timelybackend.model.User;
import com.spring.timelybackend.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepo;
public Auth login(String username, String password){ return userRepo.login(username, password); }
public User getUserById(int user_id) { return userRepo.getUserById(user_id); }
}
模型:
package com.spring.timelybackend.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String firstname;
private String lastname;
private String email;
public User (){
}
public User(String username, String password, String firstname, String lastname, String email){
this.username = username;
this.password = password;
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
}
//region getters & setters
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public void setPassword(String password){
this.password= password;
}
public String getPassword(){
return password;
}
public void setFirstname(String firstname){
this.firstname = firstname;
}
public String getFirstname(){
return firstname;
}
public void setLastname(String lastname){
this.lastname = lastname;
}
public String getLastname(){
return lastname;
}
public void setEmail(String email){
this.email = email;
}
public String getEmail(){
return email;
}
//endregion
}
授权型号:
package com.spring.timelybackend.models;
import java.util.UUID;
public class Auth{
private UUID token;
private Integer userId;
public Auth(UUID token, Integer userId){
this.token = token;
this.userId = userId;
}
public Auth(){
}
public UUID getToken() {
return token;
}
public void setToken(UUID token) {
this.token = token;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'userRepo'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.spring.timelybackend.model.Auth com.spring.timelybackend.repository.UserRepository.login(java.lang.String,java.lang.String)! No property login found for type User!
Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.spring</groupId>
<artifactId>timely-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>timely-backend</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
解决方案
在消息的最后:
未找到用户类型的属性登录名!
考虑将方法及其实现放在服务中,因为属性必须存在才能放入存储库中。
推荐阅读
- ios - 当 TextEditor 失去焦点时如何得到通知?
- elasticsearch - 通过避免重复计算elasticsearch中的记录
- c# - C# - 向子进程发送输入 - 控制台应用程序
- python - Selenium:网站中的特定页面出现空白/白屏
- amazon-web-services - AWS CLI 列出所有 S3 存储桶的加密状态
- php - 删除 url 中的文件扩展名不起作用
- javascript - 模拟类似于 GOTO 的命令的标签
- javascript - 推送新对象时,对象中的嵌套数组最后一个元素被删除
- google-api - Google Classroom API 访问要求
- angular - Angular,RxJs,初始化组件的子变量