spring - REST API - 如何创建新的数据类型以简化输入验证
问题描述
在我的应用程序中,我反复使用某些数据类型。例如,我接受多个控制器请求中的电话号码。我不想在我的请求中使用 String 类型并一次又一次地重复相同的@Pattern。相反,我想创建一个电话类型并使用@Valid,电话的类型是字符串,我在这里使用带有电话号码正则表达式的@Pattern。如果请求接受电话号码列表,则客户端应该能够像 '''{ "phoneNumbers": [ "123456789", "123456789" ] }''' 这样传递有可能吗?如果是,电话类型应该是什么样子?
提前致谢。
解决方案
看看这个库。它包括一个 Jackson 模块来为您处理微类型的反序列化。
在您的场景中,您将创建一个Phone
扩展类型MicroType<String>
。我认为唯一需要注意的是,您需要为 value 属性提供一个 getter 才能应用验证约束:
@Pattern(...)
protected String getValue() {
return super.value();
}
请注意,如果只是重复@Pattern.regex
困扰您,另一种解决方案是创建自定义@Phone
约束注释:
@Constraint(validatedBy = {})
@Retention(RUNTIME)
@Target(FIELD)
@ReportAsSingleViolation
@Pattern(...)
public @interface Phone {
String message() default "Invalid phone no";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
推荐阅读
- javascript - 是否可以制作一个触发 PWA“添加到主屏幕”安装横幅的应用内按钮?
- c# - MS Bot 框架中的自动填充选项
- assembly - 如何在 nasm 中为 BIN 文件创建 ELF 子系统?
- android - 适用于 API 10 的 AppCompatV7 最新版本
- node.js - Angular 4 - 使用 http 请求检测连接问题
- charts - 组合图表 - 使用多个 THEN/OVER 函数进行计算
- delphi - 使用 extCreatePen 的虚线不在 Delphi 中打印
- django - 从 Listview 中的其他模型获取字段的总和
- ios - 当没有为位置服务授予权限时,MKUserTrackingButton 会变成一个微调器
- php - 这个 php 操作符是做什么的?