我如何合并通用弹簧靴和角度的验证标准?

问题描述

现在我正在分别在弹簧靴和角度靴中实施验证
工作正常 但是,
当我的验证标准发生变化时,需要在两侧进行更改并同时重新部署
我们可以有一个解决方案,在一个地方进行更改,并且在两侧都适用吗?

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>

解决方法

我们已经通过简单的验证规则解决了该任务,该规则验证单个字段并正在研究更复杂情况的解决方案。

我们的解决方案将所有来自bean验证(使用反射)的验证规则作为元数据有效负载,通过json通过json发送给客户端,前提是-并且仅当-客户端通过http标头请求此验证规则。通常,您只需发送一次验证规则。

在JavaScript客户端,我们解释这些规则并进行验证。

一开始有些工作,但从长远来看会得到回报。

将多个字段绑定在一起的复杂验证规则比较麻烦。 SpEL和UEL之类的表达语言似乎很有前途。不幸的是,几乎没有任何实现都可以在两侧运行相同的EL。

在这些实现中,只有spel2js,但是它已经存在了几天,并且显然不再得到积极的支持。

另一种方法是直接在服务器端使用JavaScript。在JavaScript中为Java定义验证规则似乎有些奇怪,但是与许多其他解决方案相比,直接在客户端运行JavaScript要容易得多。我们正在对此方法进行调查。

,

请理解,UI和API验证不一定总是保持相同。

无论如何,到目前为止我可以想到两种方法-

  1. 您可以编写验证服务,将整个json有效负载传递给审定端点。您可以同时从UI和后端调用它,并向您返回成功或验证失败的详细响应。

  2. 向用户提供一些规范文档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/

https://openapi.tools/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...