现在我正在分别在spring-boot和angular中实现验证
工作正常但是,
当我的验证标准发生变化时,需要在双方都进行更改并重新部署
我们能有任何解决方案吗?我们在一个地方进行更改,并适用于双方
Java代码
@NotBlank(message = "Address is required.")
@Size(max = 300, message = "Allowed upto 300 characters for address.")
private String address;
角度代码
TS文件
'address': [null, Validators.compose([Validators.required])],
HTML文件
<textarea
[maxlength]="utilsService.validationService.MAX_300"
[formControl]="registrationForm.controls['address']">
</textarea>
我们已经为简单的验证规则解决了这项任务,这些规则验证单个字段,并正在研究更复杂情况的解决方案。
我们的解决方案通过json将bean验证(使用反射(中的所有验证规则作为元数据有效载荷发送到客户端,前提是客户端通过http头请求。通常情况下,您只需要发送一次验证规则。
在使用JavaScript的客户端,我们解释这些规则并进行验证。
有些人一开始很努力,但从长远来看是有回报的。
将多个字段绑定在一起的复杂验证规则更难实现。像SpEL和UEL这样的表达语言似乎很有前途。不幸的是,几乎没有任何实现在两侧运行相同的EL。
其中一个实现是spel2js,但它已经存在了好几天,显然不再受到积极支持。
另一种方法是直接在服务器端使用JavaScript。在JavaScript中为Java定义验证规则似乎有点奇怪,但与许多其他解决方案相比,直接在客户端运行JavaScript要容易得多。我们现在正在调查这种方法。
请理解UI和API验证不一定总是相同的。
无论如何,我现在可以想到的两种方法——
-
您可以编写一个验证服务,将整个json负载传递到valdiation端点。您可以从UI和后端调用它,并向您返回成功或验证失败的详细响应。
-
用户可以使用一些规范文档JSON/YML来验证请求。请参阅下面的链接,其中显示了如何基于开放api规范验证JSON请求。Spring引导后端和angular UI可以有相同的规范文件进行验证,然后将其提交给您的repo,供前端和后端使用。
https://github.com/kogosoftwarellc/open-api/tree/master/packages/openapi-schema-validator
https://springframework.guru/using-swagger-request-validator-to-validate-spring-cloud-contracts/
https://openapi.tools/