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校验标准

总结

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

相关文章

  • SpringBoot实现邮件发送的示例代码

    SpringBoot实现邮件发送的示例代码

    电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。本文详细为大家介绍了SpringBoot实现发送电子邮件功能的示例代码,需要的可以参考一下
    2022-04-04
  • Java对象深复制与浅复制实例详解

    Java对象深复制与浅复制实例详解

    这篇文章主要介绍了 Java对象深复制与浅复制实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • Spring JDBC 框架简介

    Spring JDBC 框架简介

    Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用JdbcTemplate类框架的经典和最受欢迎的方法。本文给大家介绍Spring JDBC 框架的相关知识,感兴趣的朋友一起看看吧
    2021-12-12
  • Java实现浏览器大文件上传的示例详解

    Java实现浏览器大文件上传的示例详解

    文件上传是许多项目都有的功能,用户上传小文件速度一般都很快,但如果是大文件几个g,几十个g的时候,上传了半天,马上就要完成的时候,网络波动一下,文件又要重新上传,所以本文给大家介绍了Java实现浏览器大文件上传的示例,需要的朋友可以参考下
    2024-07-07
  • Java单例模式的应用示例

    Java单例模式的应用示例

    这篇文章主要介绍了Java单例模式的应用示例,需要的朋友可以参考下
    2014-02-02
  • Java向List集合中批量添加元素的实现方法

    Java向List集合中批量添加元素的实现方法

    这篇文章主要介绍了Java向List集合中批量添加元素的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • java Comparable和Comparator的区别及作用面试精讲

    java Comparable和Comparator的区别及作用面试精讲

    这篇文章主要为大家介绍了java Comparable和Comparator的区别及作用面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Spring中的@Repository注解源码详解

    Spring中的@Repository注解源码详解

    这篇文章主要介绍了Spring中的@Repository注解详解,@Repository注解修饰哪个类,则表明这个类具有对对象进行增删改查的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan通过路径扫描给找到,需要的朋友可以参考下
    2023-10-10
  • Spring与Mybatis整合方式(mybatis-spring整合jar包功能)

    Spring与Mybatis整合方式(mybatis-spring整合jar包功能)

    这篇文章主要介绍了Spring与Mybatis整合方式(mybatis-spring整合jar包功能),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Java请求调用参数格式为form-data类型的接口代码示例

    Java请求调用参数格式为form-data类型的接口代码示例

    这篇文章主要给大家介绍了关于Java请求调用参数格式为form-data类型的接口的相关资料,文中给出了详细的代码示例,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08

最新评论