如何解决java.util.NoSuchElementException:尝试检查emailID是否已在POSTGRES数据库中注册时,抛出无值异常
我是Spring Boot的新手,我尝试使用未注册的emailID检查给定的电子邮件ID在Postgres数据库中是否可用。但是不幸的是得到了这个NoSuchElementException。我在这里附上了一个例外截图,供您参考。你们可以帮我解决这个问题吗?。
TipTopController.java
@RestController
@RequestMapping(path = "/user")
public class TipTopController {
@Autowired
private UserService userService;
@PostMapping(path = "/registration")
public ResponseEntity<UserRegistrationResponse> registration(@RequestBody UserRegistrationModel userRegistrationModel){
UserRegistrationResponse userRegistrationResponse = userService.doUserRegistration(userRegistrationModel);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("description","User created successfully");
return ResponseEntity.status(HttpStatus.OK)
.headers(httpHeaders)
.body(userRegistrationResponse);
}
}
UserService.java
@Service
public class UserService {
private static final Logger logger = LogManager.getLogger(UserService.class);
@Autowired
private UserRepository userRepository;
@Transactional
public UserRegistrationResponse doUserRegistration(UserRegistrationModel userRegistrationModel){
UserRegistrationResponse userRegistrationResponse = new UserRegistrationResponse();
try{
logger.info("Entering into try block");
Optional<UserInformationRepo> userInformationRepo=userRepository.findById(userRegistrationModel.getEmail());
logger.info("Get value is "+userInformationRepo.get().getEmail());
logger.info("Username is "+userInformationRepo.get().getFirstName()+" "+userInformationRepo.get().getLastName());
if(userInformationRepo.isPresent()){
userRegistrationResponse.setStatus(false);
userRegistrationResponse.setMessage("This email id { "+userRegistrationModel.getEmail()+" } is taken by another user already");
}
else{
UserInformationRepo userInformationRepoSave = new UserInformationRepo();
userInformationRepoSave.setEmail(userRegistrationModel.getEmail());
userInformationRepoSave.setFirstName(userRegistrationModel.getFirstName());
userInformationRepoSave.setEmail(userRegistrationModel.getLastName());
userInformationRepoSave.setEmail(userRegistrationModel.getPassword());
userRepository.save(userInformationRepoSave);
userRegistrationResponse.setStatus(true);
userRegistrationResponse.setMessage("New user account created with your " + userRegistrationModel.getEmail() + " emailId");
}
}
catch (Exception e){
logger.error(e.getMessage()+"*****"+e);
System.out.println("Exception occurred");
}
return userRegistrationResponse;
}
}
UserInformationRepo.java
@Entity
@Table(name = "USER_INFORMATION")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserInformationRepo {
@Id
@Column(name = "EMAIL")
private String email;
@Column(name="FIRSTNAME")
private String firstName;
@Column(name="LASTNAME")
private String lastName;
@Column(name="PASSWORD")
private String password;
}
UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<UserInformationRepo,String> {
}
这是我尝试通过POSTMAN工具访问注册API时遇到的异常
解决方法
-
您确定
com.ajithan.tiptop.tiptopapplication.domain.UserInformationRepo
是正确的fully qualified class name吗? -
您确定实体
UserInformationRepo
为此具有适当的构造函数吗?
UserInformationRepo(UI.EMAIL,UI.FIRSTNAME,UI.LASTNAME,UI.PASSWORD)
- 您不应为此使用本机查询。您可以通过以下方式使用JPA查询:
@Transactional
@Query(value = "select new com.ajithan.tiptop.tiptopapplication.domain.UserInformationRepo(UI.email,UI.firstName,UI.lastName,UI.password) from UserInformationRepo UI where UI.email = :email")
UserInformationRepo checkUserExists(@Param("email") String email);
- 为什么不能只使用标准方法?
Optional<UserInformationRepo> findById(String id);
您可以避免使用自定义方法checkUserExists
和saveNewUser
并开始以这种方式开始使用标准JpaRepository
方法findById
和save
:
@Transactional
public UserRegistrationResponse doUserRegistration(UserRegistrationModel userRegistrationModel)
{
UserRegistrationResponse userRegistrationResponse = new UserRegistrationResponse(); // this was missed !!!
try{
logger.info("Entering into try block");
Optional<UserInformationRepo> userInformationRepo = userRepository.findById(userRegistrationModel.getEmail());
System.out.println(userInformationRepo.getEmail());
if(userInformationRepo.isPresent()){
userRegistrationResponse.setStatus(false);
userRegistrationResponse.setMessage("This email id { "+userRegistrationModel.getEmail()+" } is taken by another user already");
}
else{
UserInformationRepo userInfo = new UserInformationRepo();
userInfo.setEmail(userRegistrationModel.getEmail());
userInfo.setFirstName(userRegistrationModel.getFirstName())
userInfo.setLastName(userRegistrationModel.getLastName());
userInfo.setPassword(userRegistrationModel.getPassword());
userRepository.save(userInfo);
userRegistrationResponse.setStatus(true);
userRegistrationResponse.setMessage("New user account created with your " + userRegistrationModel.getEmail() + " emailId");
}
}
catch (Exception e){
logger.error(e.getMessage()+"*****"+e);
System.out.println("Exception occurred");
}
return userRegistrationResponse;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。