Java 如果电子邮件地址已经存在,则使用Springboot和Jpa引发异常

Java 如果电子邮件地址已经存在,则使用Springboot和Jpa引发异常,java,spring-boot,jpa,Java,Spring Boot,Jpa,我想创建一个表单,我可以提交它和h2中的数据存储。如果电子邮件地址已在h2中,则引发异常。我有四个包(控制器、模型、服务、存储库)。当我使用h2中已经存在的电子邮件时,我不会收到异常消息。你能帮我解决问题吗 控制器类: @RestController public class RegistrationController { @Autowired private RegistrationService service; @PostMapping("/regi

我想创建一个表单,我可以提交它和h2中的数据存储。如果电子邮件地址已在h2中,则引发异常。我有四个包(控制器、模型、服务、存储库)。当我使用h2中已经存在的电子邮件时,我不会收到异常消息。你能帮我解决问题吗

控制器类:

@RestController
public class RegistrationController {

    @Autowired
    private RegistrationService service;

    @PostMapping("/registeruser")
    public  User registerUser(@RequestBody User user) throws Exception {
        
        String tempEmailId = user.getEmailId();
        if(tempEmailId !=null && !"".equals(tempEmailId)) {
            User userObject = service.fetchUserByEmailId(tempEmailId);
            if(userObject!=null) {
                throw new Exception("User with "+tempEmailId+" is already exist");
            }
            
        }
            
        User userObject = null;
        userObject = service.saveUser(user);
        return userObject;
    }
存储库:

public interface RegistrationRepository extends JpaRepository<User, Integer> {

    public User findByEmailId(String emailId);   
} 
以下是JSON响应,因此我希望打印我的消息,但不知何故不会发生:

{
    "timestamp": "2020-08-26T06:28:01.369+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "",
    "path": "/registeruser"
}

和我遇到的问题一样。我所做的不是检查if条件中的对象,而是最好尝试检查对象的属性。 如
if(userObject.getEmailId().isEmpty()){抛出新异常(“具有“+tempEmailId+”的用户已存在”);}

这对我很有效。

我遇到了同样的问题。我所做的不是检查if条件中的对象,而是最好尝试检查对象的属性。 如
if(userObject.getEmailId().isEmpty()){抛出新异常(“具有“+tempEmailId+”的用户已存在”);}

这对我很有用。

您可以配置Spring ExceptionHandler,以自定义带有异常消息的响应正文:

@ControllerAdvice
public class GlobalExceptionMapper extends ResponseEntityExceptionHandler {


  @Autowired
  public GlobalExceptionMapper() {
  }


  @ExceptionHandler(value = {Exception.class})
  protected ResponseEntity<Object> handleBusinessException(Exception ex, WebRequest request) {

    return handleExceptionInternal(ex, ex.getMessage(), new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
  }
@ControllerAdvice
公共类GlobalExceptionMapper扩展了ResponseEntityExceptionHandler{
@自动连线
公共GlobalExceptionMapper(){
}
@ExceptionHandler(值={Exception.class})
受保护的响应手柄业务异常(异常,例如WebRequest){
返回handleExceptionInternal(例如,例如getMessage(),new HttpHeaders(),HttpStatus.BAD_请求,请求);
}

您可以配置Spring ExceptionHandler,以自定义带有异常消息的响应正文:

@ControllerAdvice
public class GlobalExceptionMapper extends ResponseEntityExceptionHandler {


  @Autowired
  public GlobalExceptionMapper() {
  }


  @ExceptionHandler(value = {Exception.class})
  protected ResponseEntity<Object> handleBusinessException(Exception ex, WebRequest request) {

    return handleExceptionInternal(ex, ex.getMessage(), new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
  }
@ControllerAdvice
公共类GlobalExceptionMapper扩展了ResponseEntityExceptionHandler{
@自动连线
公共GlobalExceptionMapper(){
}
@ExceptionHandler(值={Exception.class})
受保护的响应手柄业务异常(异常,例如WebRequest){
返回handleExceptionInternal(例如,例如getMessage(),new HttpHeaders(),HttpStatus.BAD_请求,请求);
}

如果您使用的是Spring Boot 2.3或更高版本,则必须在
应用程序.properties
文件中将属性
服务器.error.include message
设置为
始终

如果您使用的是Spring Boot 2.3或更高版本,则属性
服务器.error.include message
必须设置为
始终
<代码>应用程序.properties
文件。

忽略500错误。我想在“消息”中输入“+tempEmailId+”的“JSON打印”用户已经存在“忽略500错误”。我想在“消息”中输入“+tempEmailId+”的“JSON打印”用户已经存在”你能检查userObject、tempEmailId是否存在吗?记录这些值并首先检查它们。我可以在eclipse控制台中获得异常消息,但在postman中测试时,我没有得到消息。下面是eclipse控制台中的消息:java.lang.Exception:User withhosss@gmail.com是否已经存在?是否可以检查userObject、tempEmailId是存在的。记录这些值并首先检查它们。我可以在eclipse控制台中获取异常消息,但当我在postman中测试它时,我没有得到消息。下面是eclipse控制台中的消息:java.lang.Exception:User withhosss@gmail.com已经存在。谢谢您的建议。您能告诉我消息为什么不是用JSON打印的吗?I可以在eclipse控制台中获取异常消息,但是当我在postman中测试它时,我没有得到消息hosss@gmail.com已经存在谢谢你的建议。你能告诉我消息为什么没有用JSON打印吗?我可以在eclipse控制台中得到异常消息,但是什么时候我在postman中测试它,我没有得到消息hosss@gmail.com它已经存在了