Java Springboot未满足的费用异常?

Java Springboot未满足的费用异常?,java,rest,spring-boot,jpa,Java,Rest,Spring Boot,Jpa,我正在使用SpringBoot设置一个基本的REST,但是我遇到了一些我不知道如何修复的错误 希望你们能帮我:) 我已经尝试了一些注释修复,但没有成功。。。 下面你可以找到我的代码。可能依赖项不正确 用户控制器: package com.spring.timelybackend.controllers; import com.spring.timelybackend.model.Auth; import com.spring.timelybackend.model.User; import c

我正在使用SpringBoot设置一个基本的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.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>

4.0.0
org.springframework.boot
spring启动程序父级
2.1.7.发布
com.spring
及时后端
0.0.1-快照
及时后端
SpringBoot的演示项目
11
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
SpringBootStarterWeb
com.h2数据库
氢
运行时
org.projectlombok
龙目
真的
org.springframework.boot
弹簧起动试验
测试
org.eclipse.persistence
org.eclipse.persistence.jpa
2.7.4
org.junit.jupiter
朱尼特朱庇特
释放
测试
mysql
mysql连接器java
8.0.17
org.springframework.boot
springbootmaven插件

您应该这样更改代码:

@Repository
public interface UserRepository extends CrudRepository<User, Integer> 
{
    Auth findByUsernameAndPassword(String username, String password);
    User findUserByUsername(String username);
    User getUserById(Integer user_id);
}
和您的Auth实体

@OneToOne
private User user;

您正在尝试从方法名称查询创建,但没有此方法的方法实现

您应该这样更改代码:

@Repository
public interface UserRepository extends CrudRepository<User, Integer> 
{
    Auth findByUsernameAndPassword(String username, String password);
    User findUserByUsername(String username);
    User getUserById(Integer user_id);
}
和您的Auth实体

@OneToOne
private User user;
您正在尝试从方法名称查询创建,但没有此方法的方法实现

在消息的结尾处:

找不到用户类型的属性登录

考虑将方法及其实现放在服务中,因为属性必须存在才能放在存储库中。

在消息的结尾:

找不到用户类型的属性登录


考虑将方法及其实现放在服务中,因为属性必须存在才能放在存储库中。

能否将方法名称更改为用户findByUsernameAndPassword(字符串用户名、字符串密码)?将
@repository
添加到接口中不会增加任何内容。是的,但这不是正确的约定,不是吗@不管它是
@Service
还是
@Repository
都被忽略了。SpringDataJPA将为它创建一个实例,因为它有其他检测扩展的方法。
login
方法可能会出现问题(我不会感到惊讶,因为这是根本原因),并可能导致错误,除非有具体的实现。我说过同样的事情@M.Deinum我正在尝试为这个登录方法找到一个正确的实现,正如你从我的回答中读到的扫描你将你的方法名称更改为用户findByUsernameAndPassword(字符串用户名,字符串密码)?将
@Repository
添加到一个界面不会增加任何内容。是的,但这不是一个正确的惯例,不是吗@不管它是
@Service
还是
@Repository
都被忽略了。SpringDataJPA将为它创建一个实例,因为它有其他检测扩展的方法。
login
方法可能会出现问题(我不会感到惊讶,因为这是根本原因),并可能导致错误,除非有具体的实现。我说过@M.Deinum我正在尝试为这个登录方法找到一个正确的实现,正如你从我的回答中读到的一样。确保你的
@SpringBootApplication
注释类位于
com.spring.timelybackend
中,以便它检测所有组件。另外,您在控制器中的代码是危险的,您将状态保持在单例中。每个请求都将覆盖
用户
身份验证
,这很危险。您可以添加您的身份验证类吗?我编辑了我的解决方案。用户实体中没有任何字段作为Auth,因此无法返回Auth。让我们尝试这样做,确保您的
@springbootplication
注释类位于
com.spring.timelybackend
中,以便它检测所有组件。另外,您在控制器中的代码是危险的,您将状态保持在单例中。每个请求都将覆盖
用户
身份验证
,这很危险。您可以添加您的身份验证类吗?我编辑了我的解决方案。用户实体中没有任何字段作为Auth,因此无法返回Auth。我们就这样试试吧