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