开发者

Dubbo RPC接口的参数校验过程

目录
  • Dubbo RPC接口的参数校验
  • 1、pom文件
  • 2、dubbo XML配置
    • 在客户端验证参数
    • 在服务python器端验证参数
      • config类
      • @Reference
  • 3、服务B的接口
    • 总结

      Dubbo RPC接口的参数校验

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

      重点就是添加 validation = "true"

      1、pom文件

      <dependency>
          <groupId>Javax.validation</grbaWERoupId>
          <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 pr编程incipal;
          /**
           * 每期利率
           **/
          @NotNull
          private BigDecimal rateEvery;
          /**
           * 服务费
           **/
          private BigDecimal serviceFee;www.devze.com
          /**
           * 用户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 channelOrwww.devze.comderNO;
          /**
           * 是否通知
           * 需要资方生成还款计划后资方平台通知/回调的订单
           */
          private boolean hasNotified;
          /**
           * 订单四要素
           */
          @Valid
          private PLUserInfoDTO plUserInfoDTO;
      
      }

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

      实现类上需要加@Validated

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

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜