我将MyBatis
它用于涉及与数据库交互的所有操作。我还在为前端使用 Angularjs ,因此客户端验证是通过angular-validation-ghiscoding
原生 html5 验证完成的。我也想验证银行端的数据,但不使用注释。
以下是代码示例:
@RequestMapping(value = SecureApiResources.URI_UPDATE_ACCOUNT, method = RequestMethod.POST, produces = "application/json")
public @ResponseBody Account updateAccount(
@RequestBody final AccountRequestUpdate accountRequest) { // Object to be validated (accountRequest)
Account account = accountMapper.getAccountOfMerchant(authContextHolder.getMerchantId(), authContextHolder.getDefaultAccountId());
if (account == null) {
HttpErrors httpErrors = new HttpErrors(
SecureApiResources.ERROR_ACCOUNTS_NOT_FOUND);
throw new EntityNotFoundException(httpErrors);
}
int resultUpdate;
try {
// In this point I should validate the accountRequest object
account.setAccountName(accountRequest.getAccountName());
account.setCommercialName(accountRequest.getCommerciaName());
account.setCountry(accountRequest.getCountry());
account.setCity(accountRequest.getCity());
resultUpdate = accountMapper.updateMerchant(account);
if (resultUpdate == 0) {
HttpErrors httpErrors = new HttpErrors(
SecureApiResources.ERROR_ACCOUNTS_NOT_FOUND);
throw new EntityNotFoundException(httpErrors);
}
} catch (Exception e) {
HttpErrors httpErrors = new HttpErrors(
SecureApiResources.ERROR_SQL_NOT_EXECUTE);
throw new EntityNotFoundException(httpErrors);
}
return account;
}
在同一个类中,我有一个方法来创建一个帐户并接收另一个模型对象 ( AccountRequestCreate accountRequest
)。
在不使用 xml 或注释的情况下实现的最佳选择是什么?
如果您不想使用 XML 或注释,您有 2 个选项:
道具类:
当我使用这种技术时,我会同时创建一个自定义异常来处理所有可能的错误并在国际化应用程序的情况下返回本地化消息:
例外必须是这样的:
并使用它:
验证设置器:
尽管我较少推荐此选项,但您可以利用对属性的分配来
Account
验证来自前面的数据是否正确,方法是创建setters
它们返回boolean
或抛出异常:注意:这种情况仅适用于您不
AccountRequestUpdate
直接持久化而是使用数据创建其他对象的情况。证实:
抛出异常:
一个好主意是使用Spring Validator接口,将其注解为一个Component(spring bean),这样就可以在需要的时候注入并使用它,一方面它干净,另一方面它符合Spring 框架库。
一个示例实现如下:
您可以在以下链接中找到更多信息: