Dubbo RPC接口的参数校验过程

 更新时间:2025年10月20日 16:08:21   作者:雪落南城  
文章介绍了在服务A调用服务B时,如何通过添加validation="true"实现参数校验,包括在pom文件、配置文件或注解@Reference中设置,并说明服务B的接口DTO可嵌套校验,需使用@Valid和@Validated

Dubbo RPC接口的参数校验

服务A调用服务B时,调用时即对服务B的接口参数进行校验 ,无需进入到服务B

重点就是添加 validation = "true"

1、pom文件

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.1.Final</version>
</dependency>

2、dubbo xml配置

或者Config类修改 或者@Reference时添加

在客户端验证参数

<dubbo:reference id="validationService" interface="com.alibaba.dubbo.examples.validation.api.ValidationService" validation="true" />

在服务器端验证参数

<dubbo:service interface="com.alibaba.dubbo.examples.validation.api.ValidationService" validation="true" />

config类

@Bean
public ReferenceBean<PLRepaymentPlanService> repaymentPlanServiceReferenceBean(){
    ReferenceBean<PLRepaymentPlanService> referenceBean = new ReferenceBean<>();
    referenceBean.setInterface(PLRepaymentPlanService.class);
    referenceBean.setCheck(false);
    referenceBean.setValidation("true");
    return referenceBean;
}

@Reference

@Reference(validation = "true")
TestService testService;

3、服务B的接口

Integer createRepaymentPlan(@Valid RepaymentPlanRequestDTO dto,@NotNull Integer age) throws PostLoanException;

DTO 内容

@Data
public class RepaymentPlanRequestDTO implements Serializable {

    /**
     * 业务源
     **/
    @NotNull
    private Integer businessSource;
    /**
     * 业务类型0,消费贷; 1,现金贷; 2,租房; 3:payday;4:无预约现金贷 5有钱贷,6指尖贷,7多享贷,8租机,9白条,10医美,11前置扣款
     **/
    @NotNull
    private Integer type;
    /**
     * 业务规则
     */
    private String businessRule;
    /**
     * 订单id
     **/
    @NotNull
    private Integer orderId;
    /**
     * 期数
     **/
    @NotNull
    private Integer period;
    /**
     * 应还总额
     **/
    @NotNull
    private BigDecimal total;
    /**
     * 每期应还
     **/
    @NotNull
    private BigDecimal every;
    /**
     * 本金
     **/
    @NotNull
    private BigDecimal principal;
    /**
     * 每期利率
     **/
    @NotNull
    private BigDecimal rateEvery;
    /**
     * 服务费
     **/
    private BigDecimal serviceFee;
    /**
     * 用户id
     **/
    @NotNull
    private Integer userinfoId;
    /**
     * 商品id
     **/
    private Integer goodsId;
    /**
     * 渠道id
     **/
    private Integer channelId;
    /**
     * 资方id
     **/
    private Integer capitalId;
    /**
     * 起息日
     */
    private LocalDateTime startInterestDate;
    /**
     * 贷款天数
     **/
    private Integer payDays;
    /**
     * 提单编号(规则O2O+订单编号+资方+重试次数)
     */
    private String channelOrderNO;
    /**
     * 是否通知
     * 需要资方生成还款计划后资方平台通知/回调的订单
     */
    private boolean hasNotified;
    /**
     * 订单四要素
     */
    @Valid
    private PLUserInfoDTO plUserInfoDTO;

}

可以嵌套校验 但需要在嵌套校验的字段上加@Valid

实现类上需要加@Validated

启动服务B,服务A调用接口,符合添加的valid校验标准

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程常见案例分析线程池与单例模式及阻塞队列

    Java多线程常见案例分析线程池与单例模式及阻塞队列

    这篇文章主要介绍了多线程的常见案例,线程池(重点)、单例模式、阻塞队列,本文通过图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 用Java实现春联 支持自定义字体颜色

    用Java实现春联 支持自定义字体颜色

    大家好,本篇文章主要讲的是用Java编写春联 支持自定义字体颜色,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 理解 MyBatis 是如何在 Spring 容器中初始化的

    理解 MyBatis 是如何在 Spring 容器中初始化的

    这篇文章主要介绍了理解 MyBatis 是如何在 Spring 容器中初始化的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java的JSTL标签库详解

    Java的JSTL标签库详解

    JSTL包含用于编写和开发JSP页面的一组标准标签,它可以为用户提供一个无脚本环境。在此环境中,用户可以使用标签编写代码,而无须使用Java脚本
    2023-05-05
  • MyBatis 如何配置多个别名 typeAliasesPackage

    MyBatis 如何配置多个别名 typeAliasesPackage

    这篇文章主要介绍了MyBatis 如何配置多个别名 typeAliasesPackage,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot整合Lombok插件与使用详解

    SpringBoot整合Lombok插件与使用详解

    Lombok是Java开发的插件,通过注解自动生成常用代码,如getter/setter,节省开发时间,提高效率,它在编译期生成方法,不影响性能,安装Lombok需要添加Maven依赖和IDEA插件,使用注解如@Data、@Getter等简化代码编写,官网提供详细文档
    2024-09-09
  • SpringBoot微服务实现秒杀抢购代金券功能

    SpringBoot微服务实现秒杀抢购代金券功能

    本文详细介绍了如何设计一个秒杀系统,包括数据库表设计、秒杀服务创建、使用限流、缓存和异步处理来应对高并发挑战,感兴趣的可以了解一下
    2025-09-09
  • Java List一些常用方法完全攻略

    Java List一些常用方法完全攻略

    List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作,这篇文章主要介绍了Java List一些常用方法的相关资料,需要的朋友可以参考下
    2026-04-04
  • 利用Java工具类Hutool实现验证码校验功能

    利用Java工具类Hutool实现验证码校验功能

    这篇文章主要介绍了利用Java工具类Hutool实现验证码校验功能,利用Hutool实现验证码校验,校验的Servlet与今天的第一篇是一样的,唯一就是验证码的生成是不一样的,利用Hutool生成验证码更快捷.需要的朋友可以参考下
    2022-10-10
  • Java控制台实现猜拳游戏小游戏

    Java控制台实现猜拳游戏小游戏

    这篇文章主要为大家详细介绍了Java控制台实现猜拳游戏小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论