Spring Boot集成MongoDB出现No property existByUserName found for type User报错如何解决
问题原因
你在UserRepository中定义的判断存在的方法名不符合Spring Data的命名规范:
Spring Data 中判断实体是否存在的查询方法固定前缀为exists(末尾带s),你写的existByUserName、existByEmail少了末尾的s,Spring Data解析方法名时会误以为你要查询名为existByUserName的属性,自然就抛出No property existByUserName found for type User!的异常。
解决方案
- 修改
UserRepository.kt里的两个方法名,把exist改为exists即可:
package com.nilmani.mychat.repository import com.nilmani.mychat.model.User import org.springframework.data.mongodb.repository.MongoRepository import java.util.* interface UserRepository : MongoRepository<User,String> { fun findByUserName(userName:String):Optional<User> // 修正前缀为exists fun existsByUserName(userName:String): Boolean fun existsByEmail(email:String): Boolean }
- 同步修改
UserService.kt里调用这两个方法的代码,同时补充原有缺失的异常抛出逻辑(原来仅打日志的话,controller的异常捕获不会生效):
fun register(user:User,role:Role):User{ log.info("Regestering user {}",user.userName) if (userRepository.existsByUserName(user.userName)){ log.warn("UserName already Exist", user.userName) throw UserNameAlreadyExistException("用户名已存在") } if(userRepository.existsByEmail(user.email)){ log.warn("This email already Registred",user.email) throw EmailAlreadyExistException("邮箱已被注册") } user.active = true user.password = user.password user.role = setOf(role) // 这里原逻辑赋值为本身是无效的,改为传入的角色参数 return userRepository.save(user) }
内容的提问来源于stack exchange,提问作者Mama
相关产品推荐
相关产品推荐

