【问题标题】:Throw ConstraintViolationException with orElseThrow method at Save time of Employee在节省员工时间时使用 orElseThrow 方法抛出 ConstraintViolationException
【发布时间】:2020-02-12 12:02:33
【问题描述】:

我正在学习 Spring Boot,如果在保存时任何员工字段为空,我想在保存时显示错误消息。但是orElseThrow 方法显示错误。我怎样才能节省时间?

    @ApiOperation(value = "Add an employee")
    @PostMapping("/createemployee")
    Employee createOrSaveEmployee(
            @ApiParam(value = "Employee object store in database table", required = true) 
            @Valid
            @RequestBody Employee newEmployee)
            throws BadRequestExceptionHandler, ConstraintViolationException {

/*in below line orElseThrow method shows error
  that create new method named as orElseThrow in Employee Pojo. */

        return employeeRepository.save(newEmployee)
                .orElseThrow(() -> new ConstraintViolationException("Required parameters can not be empty."));
    }

【问题讨论】:

  • 存储库save 方法不返回Optional,您不能使用orElseThrow。我不知道您使用的是哪种数据库,但是如果在数据库级别需要某些字段,那么如果您尝试插入与预期不符的行,ORM 框架应该会引发异常。只要做一些调查就知道在这种情况下抛出了什么样的异常并处理它
  • “...创建新方法的错误...”您是否会将其改写为“...orElseThrow 方法显示错误:在 Employee Pojo 中创建名为 orElseThrow 的新方法”?

标签: java spring rest spring-boot crud


【解决方案1】:

Optional 返回可以使用orElseThrow() 处理。除了尝试这种方式,您几乎可以通过这种方式覆盖相同的异常以及您自己的抛出异常的方式。

try{ 
  employeeRepository.save(newEmployee); 
}catch(ConstraintViolationException e){ 
  throw new OwnDefinedException("Required parameters can not be empty."); 
}

【讨论】:

  • 约束违反异常不接受字符串,它接受设定值。我试过你在这里写的。
  • 我已经更新,如果违反约束,您可以抛出自己定义的异常。您还可以添加多个异常以相同的方式处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2018-02-07
  • 2011-01-03
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
相关资源
最近更新 更多