springboot参数校验

本文介绍了如何在SpringBoot中实现参数联合校验,特别是针对微信支付退款接口,通过自定义分组校验确保交易号和商户订单号至少传递一个。示例代码展示了使用@GroupSequenceProvider和条件注解进行参数验证的方法。
摘要由CSDN通过智能技术生成

参考文章:(1条消息) springBoot参数联合校验,自定义分组校验_yuhui666666的博客-CSDN博客_springboot 参数联合校验https://blog.csdn.net/y666666y/article/details/118482863 

一、自定义分组完成微信支付,申请退款参数二选一

@GroupSequenceProvider(value = NativeRefundSequenceProvider.class)
@Data
public class NativeRefundDTO {
    /**
     * 微信支付基本配置
     */
    @Valid
    @NotNull(message = "微信支付基本配置必传")
    private WxPayBase wxPayBase;


    @NotBlank(message = "微信支付订单号必传",groups = WhenOutTradeNoIsNull.class)
    @Length(min = 1, max = 32, message = "微信支付订单号长度需要在1和32之间",groups = WhenOutTradeNoIsNull.class)
    private String transaction_id;


    @NotBlank(message = "商户订单号必传",groups = WhenTransactionIdIsNull.class)
    @Length(min = 6, max = 32, message = "商户订单号长度需要在6和32之间",groups = WhenTransactionIdIsNull.class)
    private String 	out_trade_no;


    @NotBlank(message = "商户退款单号必传")
    @Length(min = 1, max = 64, message = "商户退款单号长度需要在1和64之间")
    private String 	out_refund_no;

    /**
     * 退款原因
     */
    @Length(min = 1, max = 80, message = "退款原因长度需要在1和80之间")
    private String 	reason;

    /**
     * 退款结果回调url
     */
    @Length(min = 8, max = 256, message = "退款结果回调url长度需要在8和256之间")
    private String 	notify_url;


    /**
     *  退款资金来源
     */
    @Length(min = 1, max = 32, message = "退款资金来源长度需要在1和32之间")
    private String funds_account;

    /**
     * -金额信息
     */
    @Valid
    private NativeRefundAmount amount;

    /**
     * 退款商品
     */
    @Valid
    private List<NativeRefundGoodsDetail> goods_detail;


    /**
     * 微信支付订单没传
     */
    public interface WhenTransactionIdIsNull {}

    /**
     * 商户订单号没传
     */
    public interface WhenOutTradeNoIsNull {}


}

public class NativeRefundSequenceProvider implements DefaultGroupSequenceProvider<NativeRefundDTO> {

    @Override
    public List<Class<?>> getValidationGroups(NativeRefundDTO dto) {
        List<Class<?>> defaultGroupSequence = new ArrayList<>();
        defaultGroupSequence.add(NativeRefundDTO.class);

        if(Objects.nonNull(dto)){
            //微信支付订单号为null,group =WhenTransactionIdIsNull 的校验注解生效
            if(Objects.isNull(dto.getTransaction_id()) ){
                defaultGroupSequence.add(NativeRefundDTO.WhenTransactionIdIsNull.class);
            }
            //商户订单号为null,group = WhenOutTradeNoIsNull 的校验注解生效
            if(Objects.isNull(dto.getOut_trade_no())){
                defaultGroupSequence.add(NativeRefundDTO.WhenOutTradeNoIsNull.class);
            }
        }
        return defaultGroupSequence;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值