英文:
Filed to create query for method public abstract
问题
我在项目中使用控制器、用户、仓库和服务创建了一个登录用户。在控制器中,如果电子邮件和密码不为空,则登录;否则抛出异常 "用户不存在"。我遇到了以下错误,请帮我解决这个问题。
错误信息:
创建bean时出错,bean名称为 'registrationRepository':FactoryBean 在创建对象时抛出异常;嵌套异常是 java.lang.IllegalArgumentException: 无法为类型 User 找到属性 byPassword 的方法 public abstract com.adventure.network.model.User com.adventure.network.repository.RegistrationRepository.findByEmailIdAndByPassword(java.lang.String,java.lang.String) 的查询!
控制器代码:
@RestController
public class RegistrationController {
@Autowired
private RegistrationService service;
@PostMapping("/login")
public User loginUser(@RequestBody User user) throws Exception {
String tempEmailId = user.getEmailId();
String tempPassword = user.getPassword();
User userObject = null;
if(tempEmailId!=null && tempPassword!=null) {
userObject = service.fetchUserByEmailIdByPassword(tempEmailId, tempPassword);
}
if(userObject == null) {
throw new Exception("用户不存在");
}
return userObject;
}
}
服务代码:
@Service
public class RegistrationService {
@Autowired
private RegistrationRepository repo;
public User fetchUserByEmailIdByPassword(String email, String password) {
return repo.findByEmailIdAndByPassword(email, password);
}
}
仓库代码:
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findByEmailIdAndByPassword(String emailId, String password);
}
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.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.adventure</groupId>
<artifactId>network</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>network</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.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
英文:
I created a login user using controller, user, repository and service in my project. In controller, if email id and password are not null then login otherwise throw an exception "User Not Exist". I am getting the bellow error, can you help me to fix this issue?
Error:
Error creating bean with name 'registrationRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.adventure.network.model.User com.adventure.network.repository.RegistrationRepository.findByEmailIdAndByPassword(java.lang.String,java.lang.String)! No property byPassword found for type User!
Controller:
@RestController
public class RegistrationController {
@Autowired
private RegistrationService service;
@PostMapping("/login")
public User loginUser(@RequestBody User user) throws Exception {
String tempEmailId = user.getEmailId();
String tempPassword = user.getPassword();
User userObject = null;
if(tempEmailId!=null && tempPassword!=null) {
userObject = service.fetchUserByEmailIdByPassword(tempEmailId, tempPassword);
}
if(userObject == null) {
throw new Exception("User is not exict");
}
return userObject;
}
Service:
@Service
public class RegistrationService {
@Autowired
private RegistrationRepository repo;
public User fetchUserByEmailIdByPassword(String email, String password) {
return repo.findByEmailIdAndByPassword(email, password);
}
}
Repository:
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findByEmailIdAndByPassword(String emailId, String password);
}
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.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.adventure</groupId>
<artifactId>network</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>network</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.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
答案1
得分: 1
根据您的错误信息 No property byPassword found for type User!
,它正在寻找名为 byPassword
的属性,您需要在存储库中将其更改为 andPassword
,如下所示:
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findByEmailIdAndPassword(String emailId, String password);
}
Spring 将解析在 by 后面提到的每个属性,您只需要在方法开头使用 by。
您还可以将名称更改为更易读的形式:
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findUserByEmailIdAndPassword(String emailId, String password);
}
英文:
As per your error message No property byPassword found for type User!
, it is looking for the property named byPassword
you need to change to andPassword
in the repository as shown below.
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findByEmailIdAndPassword(String emailId, String password);
}
Spring will parse every property mentioned after by, you need by only at the start of the method
You can also change the name to be more readable as
public interface RegistrationRepository extends JpaRepository<User, Integer> {
public User findUserByEmailIdAndPassword(String emailId, String password);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论