【问题标题】:Service validation: throw an exception if validation failed服务验证:如果验证失败则抛出异常
【发布时间】:2017-03-13 00:43:29
【问题描述】:

我需要你的帮助!

在我的 Web 项目(它基于 Spring MVC)中,我使用异常来指示某些验证失败,但我不确定这样做是否正确。

例如我有这样的服务:

@Service
@Transactional
public class UserService {

@Autowired
private UserRepository userRepository;

public User createUser(UserDTO userDTO) throws IllegalArgumentExceptio {
    validateUserEmail(userDTO);
    return userRepository.save(new User(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), userDTO.getPassword()));
}

private void validateUserEmail(UserDTO userDTO) throws IllegalArgumentException {
        String emailPattern = "^[a-z0-9-\\+]+(\\.[a-z0-9-]+)*@"
                + "[a-z0-9-]+(\\.[a-z0-9]+)*(\\.[a-z]{2,})$";

        if (userDTO() == null) {
            throw new IllegalArgumentException(INVALID_EMAIL_NULL.getMessage());
        } else if (userDTO().length() > 25) {
            throw new IllegalArgumentException(INVALID_EMAIL_LENGTH.getMessage());
        } else if (!userDTO().matches(emailPattern)) {
            throw new IllegalArgumentException(INVALID_EMAIL_FORMAT.getMessage());
        }
    }
}

我读过这一篇article。我也知道还有另一种方法是使用 Hibernate Validator。

所以,主要问题是:哪一种方法是最佳实践,为什么?

  1. 和我一样在验证过程中抛出异常。
  2. 使用notification pattern之类的东西。
  3. 使用休眠验证器。

【问题讨论】:

  • 我的回答有帮助吗?
  • @javaguy 是的,它帮助了我。谢谢

标签: java spring hibernate validation exception


【解决方案1】:

显然,使用 Hibernate Validator for Bean Validations,这是现成的库 是最好的方法,因为我们不需要为最小长度/最大长度等重写大量代码。显式验证。

另外,如果您自己重写最小长度/最大长度验证的逻辑,则需要进行大量测试以确保编写的代码正确,这是必须的。

经验法则,如果一些受信任的代码已经可用,不要尝试重新发明/重写,而只是利用它,这称为DRY(Don't Repeat Yourself)原则 ,在任何编程中都非常重要

【讨论】:

    【解决方案2】:

    这是一个非常糟糕的主意。我想到的您的解决方案的一个问题是:如果您的电子邮件验证失败,您将如何通知用户?我会选择custom validation annotation。如果电子邮件验证失败,您只需返回false。使用这种方法,您还可以在电子邮件验证失败时轻松通知用户,因为BindingResult 将包含错误。此外,另一个好处是错误消息的本地化。所以,是的,Hibernate 验证器是可行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 2020-08-03
      • 2013-10-09
      • 2013-04-09
      相关资源
      最近更新 更多