You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于同一rqtDto类实现多微服务差异化字段校验方案咨询

解决方案

核心复用JSR-380(Bean Validation)原生的分组校验能力,无需自定义校验注解、无需创建子类、完全兼容原有主微服务的全量校验逻辑,实现步骤如下:


步骤1:公共父库新增下游微服务专属校验分组

Bean Validation的校验分组本身就是空标记接口,直接在公共父库为每个下游微服务定义独立的分组即可:

// 公共父库统一维护,可随时新增下游服务对应的分组
public interface SecondMicroserviceGroup {}
public interface ThirdMicroserviceGroup {}

步骤2:为rqtDto字段的校验注解追加对应服务分组

仅给需要在对应下游微服务校验的字段的所有校验注解的groups属性,追加对应微服务的分组即可,不需要校验的字段无需修改:

@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@GroupSequence({ Security.class, Validations.class, Functionals.class, rqtDto.class })
public class rqtDto {
    /**
     * Unique Identifier.
     */
    @CyberSecurity(groups = {Security.class, SecondMicroserviceGroup.class})
    @NotBlank(groups = {Validations.class, SecondMicroserviceGroup.class}, message = "blank")
    @Size(min = 0, max = 32, groups = {Validations.class, SecondMicroserviceGroup.class}, message = "invalid data")
    @myId(groups = {Functionals.class, SecondMicroserviceGroup.class})
    private String myId;

    // 该字段不需要在第二个微服务校验,groups不追加SecondMicroserviceGroup即可
    @CyberSecurity(groups = Security.class)
    @NotNull(groups = Validations.class, message = "is null")
    @Enumeration(enumClazz = MyEnum.class, groups = Functionals.class, message = "not allowed")
    private String enumResult;

    // 其余字段逻辑同上
    @Builder.Default
    @CyberSecurity(groups = Security.class)
    @Enumeration(enumClazz = EnumValidation.class, groups = Functionals.class, message = "not allowed")
    private String myEnumValidation = EnumValidation.ALL.getCode();

    @Valid
    @NotEmpty(groups = Validations.class, message = "empty")
    private Collection<ClientsDto> clients;
}

步骤3:各微服务指定对应分组执行校验

校验时传入指定的分组即可实现按需校验:

  • 主微服务全量校验:依旧传入原有三个分组Security.class、Validations.class、Functionals.class,原有逻辑完全无侵入
  • 第二个下游微服务校验:仅传入SecondMicroserviceGroup.class,只会触发加了该分组的字段的校验规则
  • 其余下游微服务按同理传入自身对应的分组即可

可选灵活方案

如果不想在公共父库提前预定义所有下游服务的分组,可采用编程式校验:在下游微服务本地维护需要校验的字段列表,通过Validator类的API手动遍历指定字段执行校验,无需修改公共父库的rqtDto代码。


内容的提问来源于stack exchange,提问作者Alvaro García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 02:36:04