查询报错:java.lang.StackOverflowError: null

Springboot异常java.lang.StackOverflowErrorfen分析及解决办法 一、报错信息 Caused by: java.lang.StackOverflowError: null at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2774) at java.io.ObjectInputStream.readHandle(ObjectInputStream... 阅读详情

java.lang.StackOverflowError: null

字面理解报错的原因是栈溢出。

我这里仅讲由于使用JPA导致的java.lang.StackOverflowError: null

例子:

清洁工实体

@Data
@Entity
@Table(name = "cms_cleaner")
public class Cleaner implements Serializable {

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "cms_cleaner_room",
            joinColumns = {@JoinColumn(name = "CLEANER_ID", referencedColumnName = "cleanerId")},
            inverseJoinColumns = {@JoinColumn(name = "ROOM_ID", referencedColumnName = "roomId")})
    private Set<Room> rooms = new HashSet<Room>();
    
}

课室实体

@Entity
@Table(name="Room")
@Data
@DynamicUpdate
public class Room implements Serializable {

    @JsonIgnore
    @ManyToMany(mappedBy = "rooms", fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.REFRESH})
    private Set<Cleaner> cleaners=new HashSet<Cleaner>();

}

原因:查询时产生了死循环或无限递归

输出一个room对象时,也会输出cleanerlist,因为是双向关联的,所以也会触发cleaner对象,接下来便是rooms。。。产生无限递归,导致栈溢出。

解决:

办法一

for(Room room : cleaner.getRoomList()){
      //提前终止,这样便不会产生无限递归
      room.setRoomList(null);
      System.out.println(role);

}

办法二

把双向的关联变为单向的关联。

即删除Room实体类中的:

 @JsonIgnore
    @ManyToMany(mappedBy = "rooms", fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.REFRESH})
    private Set<Cleaner> cleaners=new HashSet<Cleaner>();

办法三

将两个实体类中的@ManyToMany均改成@OneToMany。

Java面试八股文高频考点全解析:从HashMap到JVM的进阶指南 Java作为企业级后端开发的主流语言,其核心技术点始终围绕集合框架、并发编程、JVM调优与数据库访问等基础展开。理解HashMap的底层存储结构与扩容机制,掌握线程池的核心参数与任务调度流程,是深入Java并发与性能优化的关键。这些知识不仅决定代码的健壮性,更直接影响系统在高并发场景下的稳定性。在实际工程中,从线程池的合理配置到MySQL索引的B+树选择,再到Redis缓存的穿透防护,每一项技术选型都体现着开发者对原理的把握。因此,系统梳理这些高频技术点的定义、原理与工程落地路径,成为Java开发者从熟练使 阅读详情

相关推荐

Spring Data JPA 核心原理与工程实践:从声明式查询到生产避坑

Spring Data JPA 是基于 JPA 规范构建的高级数据访问抽象层,其本质是通过编译期方法名解析、动态代理与元数据校验,将数据操作升华为类型安全的 Java 接口契约。它不替代 SQL,而是封装重复性数据交互模式,实现关注点分离与工程一致性。技术价值体现在显著降低 DAO 层样板代码、提升测试可维护性、支持多数据库透明切换,并为 Spring Cloud、Spring Security 等生态组件提供稳定的数据底座。典型应用场景包括微服务中的用户管理、订单分页查询、跨库状态同步等高复用业务模块。本

weixin_30940783的博客 385

java.lang.StackOverflowError: null(栈内存溢出)

java.lang.StackOverflowError: null(栈内存溢出)

m6494854的博客 1万+

Java异常面试题(2026版)

序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124023797 2 Java集合容器面试题(2022版) 待续… 3 Java异常面试题(2022版) 待续… 4 并发编程面试题 (2022版) 待续… 5 JVM面试题(2022版) 待续… 6 Spring面试题(2022版) 待续… 7 Spring MVC面试题(2022版) 待续… 8 S....

拉格朗日的学习笔记 5489

java.lang.StackOverflowError: null(栈溢出异常)

平常遇见的栈溢出无非就两种 第一种: service层忘加@service注解或者@Autowired注解了 第二种: 就是当多个实体类之间有多对一、多对多 关系时,重写toString方法的时候一定要注意,不要两个有对应关系的实体类都重写相关联属性字段的toString方法,这样会导致一直递归重写下去,内存当然会被耗尽,导致栈溢出 最近我在写一个博客项目的时候,遇到了栈溢出,报错如下: ​ 很明显这是Thymeleaf模板渲染出错才导致的栈溢出(毕竟第一次见,...

zyh201314zyh的博客 2万+

在Qt中使用EtherCAT-SOEM的初始化中,状态机卡在PreOp->Save-Op过程中,出现State=0x12, Error=0x001e错误的解决办法

1.在调试EtherCAT软件过程中,一直出现配置从站进不了Save_op状态,通过下函数检查从站状态: //使用的从站编号为1 只有1个从站 ec_slave[1].state = EC_STATE_SAFE_OP; ec_writestate(1); //设置到安全模式 ec_statecheck(1, EC_STATE_SAFE_OP, EC_TIMEOUTSTATE * 4); printf("Slave %d State=0x%2.2x StatusCode=0x%4

zeal_for_rov的博客 6828

FOC电机控制中电流采样延迟补偿的原理和方法

摘要: FOC电机控制中,电流采样、计算与PWM更新存在固有延迟(约1.5个PWM周期),导致相位滞后,限制电流环带宽。主流补偿方法包括: 一阶前向预测法:基于历史电流值预测未来电流,抵消延迟,工程应用广泛; 相位超前补偿:通过s/z域校正器设计实现等效预测; 状态观测器法(如龙伯格观测器):通过电机模型闭环估计状态,兼具噪声抑制和参数辨识能力,但复杂度高。实际需注意参数敏感性、离散化精度及延迟时间校准,避免过补偿风险。一阶预测法因平衡效果与复杂度成为工业首选。

jifengzhiling的博客 2232

java.lang.StackOverflowError null

更进一步,VirtualMachineError继承自Error类,应用程序不应该捕获这种严重的错误。不要再throw语句里面抛出这样的错误,因为这些错误是不应该发生的异常条件。出现栈内存溢出的常见原因有2个: 1. 函数递归调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈,并且没有及时出栈。第二种情况也比较常见,比如在函数里定义很大的局部变量(例如大数组),这种情况可以将局部变量改为静态变量(实质上也是全局变量)。个人的错误是我的服务层的方法调用了自身,这个是一个很粗心的的错误。...

m0_67401055的博客 5119

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6147

java.lang.StackOverflowError: null(栈内存溢出)递归导致

java.lang.StackOverflowError: null(栈内存溢出)递归导致

global_coding的博客 3141

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

PX4从放弃到精通(二十七):固定翼姿态控制

固件版本 PX4 1.13.2欢迎交流学习,可加左侧名片。

超维空间科技的博客 6888

JPA查询报错:java.lang.StackOverflowError: null

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError at org.springframework.web.servlet.DispatcherServlet.doDispatch(Dispatch...

奋斗中的老青年 808

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1303

JPA执行查询报错java.lang.StackOverflowError: null问题排查与解决

开发和测试环境运行正常,报错方法为Jpa类库里JoinProcessor.doFindAllNodes方法,该方法用于拼接查询参数,如(?),由于是通过迭代进行拼接,通过jpa提供的findByIdIn方法,传入的id集合,所以当拼接参数过长时,会发生栈溢出异常。生产环境执行定时任务时报错 java.lang.StackOverflowError: null。可以通过分段查询的方式和更改jvm启动参数来控制拼接长度。

MaYuKang的博客 1102

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

315

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

双向关联表查询时异常:java.lang.StackOverflowError: null

java.lang.StackOverflowError: null报错的原因是栈溢出。是由于使用Jpa查询时产生了死循环或无限递归。比如如下两个双向关联的实体列:public class User{ //其他属性及get set 方法略 @ManyToMany @JoinTable(name = "UserRole", joinColumns = { @JoinColumn(name = "us...

east123321的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java.lang.StackOverflowError: null

java.lang.StackOverflowError: null 报错的原因是栈溢出。 是由于使用Jpa查询时产生了死循环或无限递归。 在写SpringBoot+Mybatis中遇到这个异常,这个异常好沙雕,就我这种粗心的人犯错 这个异常是因为,在service调用了本类的方法,懂我意思吧~ 看图说话 这是一个坑哈哈哈,你是不是也和我一样粗心哈哈~ ...

好巧~我看到你了 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

对象序列化成json报错:java.lang.StackOverflowError: null

java.lang.StackOverflowError: null at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.def

qq_44209563的博客 1599

报错:Servlet.service() for servlet XXX with root cause java.lang.StackOverflowError: null

报错位置:Controller返回数据转换为json的时候,即json序列化多对一和多对多关系的对象时 造成死循环了问题,出现了无限递归调用的情况,导致堆栈内存溢出。 具体的情况如下:A类中,有个属性:List b, A与B的关系为 OneToMany;在B类中,有属性A a,引用到A中的字段id,并作为外键。hibernate查询结果正常,可以看到返回的A对象中,有b参数值,但在json转换的时...

weixin_44284542的博客 1577

记录一次递归查询导致的 java.lang.StackOverflowError: null

由于作者使用递归统计信息,刚开始这个接口运行得正常,但是上线运行一段时间后接口就出现了,如图的栈溢出错误。-Xss 来配置栈的大小。目前作者没有选择个方式。

tiger_xia的博客 424

Java Map与字符串互转实战:从JSON序列化到查询字符串构建的避坑指南

在Java开发中,数据序列化与反序列化是连接不同系统组件的核心技术,尤其在微服务架构下,它直接关系到接口性能和系统稳定性。其核心原理是将内存中的数据结构(如Map)转换为可传输或存储的字符串格式(如JSON、查询字符串),反之亦然,从而实现跨网络、跨进程的数据交换。这项技术的价值在于保障数据在流动过程中的一致性、效率和安全性。典型的应用场景包括HTTP API通信、Redis缓存存储、数据库JSON字段操作以及日志记录等。本文聚焦于**线上故障**排查与**性能优化**,深入解析如何根据具体场景(如JSON

weixin_34195546的博客 351

Java面试场景题实战:并发扣库存、慢查询与缓存优化全解析

现代技术面试正在从“背概念”转向“解决真实问题”,考察候选人能否在业务压力下设计可行方案。并发编程要求理解原子性、锁与事务边界,例如库存超卖问题需要在数据库或缓存层保证操作一致性;MySQL慢查询排查则依赖索引结构、执行计划与分页策略的合理应用。Redis缓存虽能扛住高并发读,但穿透、击穿、雪崩的应对更需要结合空值缓存、互斥锁和过期时间抖动等工程手段。消息队列用于异步解耦和流量削峰,但消息不丢失、不重复消费是生产环境的基本底线。JVM调优与OOM排查同样要落到堆转储、GC日志分析等具体步骤。本文以Java面

weixin_34074740的博客 288

从Java项目结构理解java项目运行原理

一、概述 很多从事运维的小伙伴,很多是没有java开发经验的,但是日常工作中确又经常要接触处理java类项目,遇到运行报错,凡事诉诸于研发处理,不仅很被动效率也很低,那我们是否从运维角度,只需了解一定java基础就能处理日常的Havana类项目调试呢,尤其是java web类项目,本文基于此展开讨论,以供参考。 参考学习:Java开发网。 二、java 架构及运行原理 首先java是面向对象的,是一种面向对象的编程语言,它是一种编译型和解释型语言的结合体。java中所有的一切都可以看中一种对象,它的整个过

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 716

Java面试基础篇:面向对象、集合框架与Java8核心考点全解析

Java基础是校招与社招技术面试的必考环节,也是开发者构建工程化思维的地基。从面向对象的封装、继承、多态三大特性,到基本数据类型与包装类的缓存机制,再到String的不可变性、异常体系的设计分层,每一处都体现了Java语言在健壮性与性能之间的权衡。集合框架中的HashMap底层结构、扩容时机与线程安全问题,更是面试中区分熟练度与理解深度的关键试金石。Java 8引入的Lambda、Stream与Optional,则代表了从语法糖到函数式编程思维的转变。理解这些基础概念背后的原理,不仅能帮助应对Java面试八

weixin_33912453的博客 394
上一篇: Hibernate---JPA注解@DynamicUpdate与@DynamicInsert
下一篇: 螺旋折线(java)--蓝桥杯
PI_PIBOY
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值