Spring MVC对restful的支持

BK3437蓝牙5.2芯片实战:手把手教你设计超低功耗智能家居遥控器(附原理图) 本文详细介绍了BK3437蓝牙5.2芯片在超低功耗智能家居遥控器设计中的应用。通过分析芯片的核心优势、硬件设计要点和低功耗固件策略,手把手教你实现日均功耗低于5μA的遥控器原型,并附有原理图设计详解和常见问题解决方案。 阅读详情

Spring MV SpringMVC对restful的支持

1.   C中的常用注解

(1)@Controller

    对将成为 MVC 中控制器的类进行注解并处理HTTP 请求。

(2)@RequestMapping

    对函数进行注解,该函数处理某些 HTTP 方法、URI 或 HTTP 头。

此注解是 Spring REST 支持的关键。可以更改 method 参数以处理其他 HTTP 方法。

    例如:

    @RequestMapping(method=RequestMethod.GET,value="/emps",

       headers="Accept=application/xml,application/json")

(3)@PathVariable

   可将 URI 中的路径变量作为参数插入。

@RequestMapping("/owners/{ownerId}",method=RequestMethod.GET)

public String findOwner(@PathVariableString ownerId, Model model) {

       // ...

}

(4)@RequestParam

   这个注解跟@PathVariable功能差不多,只是参数值的来源不一样而已。它的取值来源是请求参数(querystring或者post表单字段)

对了,因为它的来源可以是POST字段,所以它支持更丰富和复杂的类型信息。比如文件对象:

 

@RequestMapping("/imageUpload")

public String processImageUpload(

@RequestParam("name") String name,

    @RequestParam("description")String description,

    @RequestParam("image")MultipartFile image) throws IOException {

   this.imageDatabase.storeImage(name, image.getInputStream(),

(int) image.getSize(), description);

   return "redirect:imageList";

}

 

(5)@RequestHeader

   将某一 HTTP 头插入方法中

(6)@RequestBody

   将 HTTP 请求正文插入方法中

(7)@ResponseBody

   将内容或对象作为 HTTP响应正文返回。

(8)HttpEntity<T>

   如果将它作为参数提供,自动插入方法中

(9)ResponseEntity<T>

   返回具有自定义状态或头的HTTP 响应

   例如:

  public @ResponseBody EmployeegetEmployeeBy(

       @RequestParam("name")Stringname,

       @RequestHeader("Accept")String accept,

       @RequestBody String body) {…}

 

public ResponseEntity<String> method(HttpEntity<String> entity) {…}

1.1  @RequestBody和@ResponseBody

这两个注解其实用到了Spring的一个非常灵活的设计——HttpMessageConverter 18.3.2 HTTPMessage Conversion

与@RequestParam不同,@RequestBody和@ResponseBody是针对整个HTTP请求或者返回消息的。前者只是针对HTTP请求消息中的一个 name=value 键值对(名称很贴切)。

        HtppMessageConverter负责将HTTP请求消息(HTTPrequest message)转化为对象,或者将对象转化为HTTP响应体(HTTP response body)。

public interface HttpMessageConverter<T> {

 

    // Indicatewhether the given class is supported by this converter.

    booleansupports(Class<? extends T> clazz);

 

    // Return thelist of MediaType objects supported by this converter.

   List<MediaType> getSupportedMediaTypes();

 

    // Read anobject of the given type form the given input message, and returns it.

    Tread(Class<T> clazz, HttpInputMessage inputMessage) throws IOException,

                                                                   HttpMessageNotReadableException;

 

    // Write angiven object to the given output message.

    void write(T t,HttpOutputMessage outputMessage) throws IOException,

                                                           HttpMessageNotWritableException;

 

}

 

Spring MVC对HttpMessageConverter有多种默认实现,基本上不需要自己再自定义HttpMessageConverter

·        StringHttpMessageConverter -converts strings

·        FormHttpMessageConverter - convertsform data to/from a MultiValueMap<String, String>

·        ByteArrayMessageConverter - convertsbyte arrays

·        SourceHttpMessageConverter - convertto/from a javax.xml.transform.Source

·        RssChannelHttpMessageConverter -convert to/from RSS feeds

·        MappingJacksonHttpMessageConverter -convert to/from JSON using Jackson's ObjectMapper

·        etc...

 

然而对于RESTful应用,用的最多的当然是MappingJacksonHttpMessageConverter。

 

但是MappingJacksonHttpMessageConverter不是默认的HttpMessageConverter:

可以配置如下:

<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

    <propertyname="messageConverters">

    <list>

        <beanclass="org.springframework.http.converter.StringHttpMessageConverter">

        <propertyname="supportedMediaTypes">

            <list>

           <value>text/plain;charset=GBK</value>

            </list>

        </property>

        </bean>

        <beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

    </list>

    </property>

</bean>

       配置好了之后,就可以享受@Requestbody和@ResponseBody对JONS转换的便利之处了:

@RequestMapping(value = "api", method = RequestMethod.POST)
@ResponseBody
public boolean addApi(@RequestBody
    Api api, @RequestParam(value = "afterApiId", required = false)
    Integer afterApiId) {
        Integer id = apiMetadataService.addApi(api);
        return id > 0;
}
 
@RequestMapping(value = "api/{apiId}", method = RequestMethod.GET)
@ResponseBody
public Api getApi(@PathVariable("apiId")
    int apiId) {
        return apiMetadataService.getApi(apiId, Version.primary);
}

 

 

2.   使用Spring中RestTemplate 对restful服务进行通信测试

RestTemplate支持其他方法,包括:

       exchange:使用请求正文执行一些HTTP 方法并获得响应。

       getForObject:执行 HTTP GET 方法并将响应作为对象获得。

       postForObject:使用特定请求正文执行HTTP POST 方法。

       put:使用特定请求正文执行HTTP PUT 方法。

       delete:执行 HTTPDELETE方法以获得特定 URI。

代码示例

 

(1)显示如何将头添加到请求中,然后调用请求。

       使用MarshallingHttpMessageConverter 您可以获得响应并将其转换为类型类。

 

清单1. XML 具象请求   

HttpHeadersheaders = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_XML);

HttpEntity<String>entity = new HttpEntity<String>(headers);

ResponseEntity<EmployeeList>response = restTemplate.exchange(

       "http://localhost:8080/rest/service/emps",HttpMethod.GET, entity, EmployeeList.class);

EmployeeListingemployees= response.getBody();

// handle theemployees

           

(2)POST请求

显示了如何将新员工发布到服务器。服务器端服务 addEmp() 可接受媒体类型为 application/xml 和 application/json 的数据。

 

清单 2. 发布新员工                     

Employee newEmp= new Employee(99, "guest", "guest@ibm.com");

HttpEntity<Employee>entity = new HttpEntity<Employee>(newEmp);

ResponseEntity<Employee>response = restTemplate.postForEntity(

       "http://localhost:8080/rest/service/emp",entity, Employee.class);

Employee e =response.getBody();

// handle theemployee

            

(3)PUT请求

       显示了如何 PUT 修改的员工以更新旧员工。它还显示了可用作请求 URI 占位符({id})的功能

 

清单3.PUT 以更新员工              

Employee newEmp= new Employee(99, "guest99", "guest99@ibm.com");

HttpEntity<Employee>entity = new HttpEntity<Employee>(newEmp);

restTemplate.put("http://localhost:8080/rest/service/emp/{id}",entity, "99");

 

(4)DELETE请求

       显示了如何 DELETE 现有员工。

 

清单4.DELETE 现有员工                    

restTemplate.delete("http://localhost:8080/rest/service/emp/{id}","99");

 

3.   支持RESTful的URL

在开发功能模块之前,应该先把URL设计好。比查对 消息 这个资源的操作URL可以这么设计:

http://arganzheng.me/messages/show/123456
http://arganzheng.me/messages/preview/123456
http://arganzheng.me/messages/delete/123456
http://arganzheng.me/messages/new
http://arganzheng.me/message/update

说明:可以看到我们的URL中有动作在里面,这个相对简单点。

事实上纯粹的RESTfulURL是把动作隐含在HTTP头中:GET、PUT、DELETE、POST。

/blog/1 HTTP GET =>  得到id = 1的blog
/blog/1 HTTP DELETE => 删除 id = 1的blog
/blog/1 HTTP PUT =>  更新id = 1的blog
/blog   HTTP POST =>  新增BLOG

不过这样对用户编码有要求,。

要支持这种URL,web.xml需要这么配置:

<!-- REST servlet-mapping -->
<servlet-mapping>
    <servlet-name>DispatcherServlet<srvlet-name>
    <url-pattern>/</url-pattern>
<srvlet-mapping>

但是这样的话有个问题,就是静态文件也被mapping了,会导致找不到资源。Spring提供了一个resources配置项支持静态文件的处理16.14.5Configuring Serving of Resources:

<!-- Forwards requests to the "/" resource to the "welcome" view -->
<mvc:view-controller path="/" view-name="index"/>
 
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- 注意:配置了mvc:resources就必须配置这个选项,否则handler mapping都失效了
    @see  http://stackoverflow.com/questions/7910845/the-handler-mapping-from-the-mvcresource-override-other-mappings-which-defined 
-->
<mvc:annotation-driven />

这样所有请求:http://arganzheng.me/resources/**会映射到webapp下的resources目录,而不是找我们的controller处理。

但是有个奇怪的问题,就是配置这个之后,原来动态东西就不能访问到了,提示找不到对应的handler,解决方案是增加一个<mvc:annotation-driven />配置。具体参见Thehandler mapping from the mvc:resource override other mappings which definedwith annotation。

另外,静态的html页面一般不放在resources路面下,而是直接在根目录下,比如:http://arganzheng.me/index.html或者http://arganzheng.me/404.html。所以应该在web.xml中在配置一个url-mapping规则:

<!-- 避免被Spring DispatcherServlet接管 -->
<servlet-mapping>
    <servlet-name>default<srvlet-name>
    <url-pattern>*.html</url-pattern>
<srvlet-mapping>

 

汽车BMS技术分享及其HIL测试方案 在全球碳中和目标的战略驱动下,新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏",其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标,更深刻影响着消费者对电动汽车的市场接受度。而电池管理系统(Battery Management System, BMS)是动力电池安全运行与性能释放的核心技术支撑。 阅读详情

相关推荐

大数据审计常用的算法模型

数据预处理:用聚类算法(K-Means)对数据分组,缩小分析范围;异常初筛:用孤立森林/DBSCAN快速标记疑似异常样本;风险分级:用随机森林/XGBoost对疑似异常打分,确定核查优先级;关联深挖:用FP-Growth挖掘异常样本背后的人员/流程关联;文本佐证:用BERT分析相关合同/审批文本,获取舞弊证据。例如,某审计项目通过“K-Means分组→孤立森林标异常→FP-Growth找关联→BERT审合同”的流程,仅用1周就完成了过去3个月需10人团队的工作量,且挖出2起隐藏的串标舞弊案。

Yulay专栏 1068

Spring(RESTFul风格)

RESTFul 1 什么是RESTFul RESTFul编写程序一种风格,不是协议。 对HTTP协议诠释(落地方案),请求方式的落地 http协议共7种,常见4种,最长使用2种 get post put delete RESTFul对服务器程序操作,进行约定。 每一个操作组成:请求路径 + 请求方式 。 (一个路径,因为请求方式的不同,可以完成不同操作) 数据传输方式:JSON数据 // 传统开发路径 查询:http://localhost:8080/user/selectAll.acti

Harden_zsc的博客 1256

模糊高清修复真王炸!ComfyUI-SeedVR2-Kontext(画质修复+P图)本地部署教程

SeedVR2_comfyUI 是由字节跳动 Seed 实验室与南洋理工大学 S-Lab 联合开源的,专为 ComfyUI 用户开发的插件版本,官方项目名为。它主打,在图像超分上表现尤其亮眼,被多位实测者称为“目前模糊图像修复最强模型“。SeedVR2 在图像超分任务中表现突出,尤其擅长恢复模糊图像的细节,被称为“模糊高清修复真王炸”。特别的,也适合用于文字密集图像(如截图、扫描文档、老照片字幕)修复。模型通过对抗训练 + 特征匹配损失提升细节真实感,理论上对文字边缘锐化也有帮助。

SJJS_1的博客 2683

Spring Boot实战:Restful API的构建

在现在的开发流程中,为了最大程度实现前后端的分离,通常后端接口只提供数据接口,由前端通过Ajax请求从后端获取数据并进行渲染再展示给用户。我们用的最多的方式就是后端会返回给前端一个JSON字符串,前端解析JSON字符串生成JavaScript的对象,然后再做处理。本文就来演示一下Spring boot如何实现这种模式,本文重点会讲解如何设计一个Restful的API,并通过Spring boot来...

大鹏小站的博客 852

SFR算法实现详解:从边缘检测到MTF计算的完整流程

本文详细解析了SFR算法从边缘检测到MTF计算的完整流程,包括边缘检测、ESF超采样、LSF差分等关键步骤。通过代码示例和实战经验,帮助开发者高效实现成像系统解析力评估,优化MTF测量精度。适用于摄像头模组调试、工业检测等场景。

Black的专栏 1009

国民技术N32G45X SysTick定时器实战:从1us到100ms的精准延迟实现(附完整代码)

本文详细解析了国民技术N32G45X芯片中SysTick定时器的工作原理,并提供了从1微秒到100毫秒的高精度延迟实现方案。通过对比官方库函数的局限性,文章重点介绍了无中断查询模式、时钟源选择策略以及完整的代码实现,帮助嵌入式开发者精准控制时序,适用于LED控制、软件模拟通信协议等多种实战场景。

weixin_29190573的博客 374

SpringMVC之RestFul风格详解

SpringMVC之RestFul风格详解 RestFul概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 功能 资源:互联网所有的事物都可以被抽象为资源 资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。 分别对应 添加、 删除、修改、查询 传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post 和 get。 http://127.0.0.1/item/

qq_41359998的博客 3021

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

SpringMVC——RESTful

RESTful 文章目录RESTful1、RESTful简介1.1、资源1.2、资源的表述13、状态转移2、RESTful的实现3、HiddenHttpMethodFilter4、RESTful 案例4.1、准备数据4.1.1、准备实体类:bean.Employee4.1.2、准备 dao 模拟数据4.1.3、准备控制器方法4.2、功能清单4.3、访问首页4.4、具体功能:查询所有员工数据4.5、具体功能:删除4.6、具体功能:跳转到添加数据页面4.7、实现回显功能(修改功能的一部分)4.7、具体功能:修改

前尘忆梦的博客 1679

安装西门子TIA Portal V15.1提示先决条件不足如何处理?

安装TIA Portal STEP 7 Professional WinCC Professional V15.1提示先决条件不足,需要如何才能够满足安装条件呢? 1.硬件要求: 安装 STEP 7 Basic / Professional V15.1 的计算机必须至少满足以下需求: 处理器: Core i5-6440EQ 3.4 GHz 或者相当 内存: 16GB或者更多(对于大型项目,为32GB) 硬盘:SSD,配备至少50GB的存储空间 图形分辨率:最小 1920 x 1080 显示器:15.6"

Robot_PLC_HMI_Automation 2万+

WorkBuddy 技能指南:基础办公与文档处理

WorkBuddy 不仅仅是一个对话工具——它通过技能(Skills)系统,将通用 AI 助手转变为具备专业领域能力的智能助手。每个技能都是一套经过精心设计的"能力包",包含专业知识、工作流程和专用工具。本文聚焦于文档处理类技能——这是日常工作中使用频率最高、最实用的能力集合。

u011186532的专栏 703

SpringMVC之RESTful(含实际代码操作)

RESTfulREST:Representational State Transfer,表现层资源状态转移。资源资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。

浩泽学编程的博客 1012

【ESP32设备通信】-两个ESP32间UART通信

在本文中,我们将使用 Arduino IDE 的 UART 硬件库在两个 ESP32 板之间执行 UART 或串行通信。 要使用 USB 端口调试和编程 ESP32,需要使用称为通用异步接收器/发送器 (UART) 通信的串行端口。 对于大多数传感器和系统,主要的通信方法被认为是 UART。 为了共享工作负载、信息和执行不同的任务,有时需要在两个 ESP32 开发板之间进行通信。

视觉与物联智能 2992

Spring MVC对RESTful的支持

什么是RESTful?        RESTful也称为REST(Repressentional State Transfer),可以理解为一种软件架构风格或设计风格,而不是一个标准。        简单来时,RESTful风格就是把请求参数变成请求路径的一...

My Blog 397

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

什么是RESTful API,Spring MVC如何支持RESTful架构

它强调使用标准的HTTP方法(GET、POST、PUT、DELETE等)来进行资源的操作,以及使用URI来标识资源。通过使用这些注解,我们可以清晰地定义API的操作、路径参数、查询参数、数据格式等,从而构建符合RESTful设计原则的API。当使用Spring MVC构建RESTful API时,注解是其中一个重要的工具,它们能够帮助标识和处理API的各种操作。Spring MVC提供了一系列的注解,用于标识和处理RESTful API的各种操作。Spring MVC的注解对应于不同的HTTP方法,例如。

weixin_65175398的博客 962

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring MVC 支持RestFul风格尝试

Spring MVC 核心流程如今的java web开发,大致和以往我们在学校学习的SSH已经大不一样了,现在基本成熟的大公司都使用Spring MVC 快速开发WEB应用。当然小编我也是**Spring MVC**的长期实践者。 首先想和大家普及下我眼中的Spring mcv整个流程过程 Spring MVC 的 restFul风格说实话自己用了这个久的Spring mvc 只知道他请求的链接格式

zzjmay的专栏 3677

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

spring mvc 对RESTful的支持

spring mvc对RESTful的支持;Spring MVC零xml配置;swagger;knife4j

Akiler的博客 451

spring MVC实现Json数据交互及RESTful支持

文章目录关于json和restful案例实践项目结构及jar包 关于json和restful Json详见. RESTful风格详见. 案例实践 项目结构及jar包 jar包 项目结构图 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee

hayhead的博客 435

Spring MVC(4)(JSON数据交互和RESTful支持)

版本:idea2020.1.1jdk1.8maven3.6.3 注:本文章摘自Java EE企业级应用开发教程,黑马程序员/编著,仅用于记录学习笔记,分享学习经历。 Tomcat配置参考:https://mp.youkuaiyun.com/editor/html/114296147 一、JSON数据交互 JSON(JavaScript Object Notation,JS对象标记),有两种数据结构 1、对象结构 以 “{” 开始,以 “}” 结束,中间用英文逗号分隔,数据由name:v...

qq_44759192的博客 306

06【SpringMVC的Restful支持】_关于spring mvc支持的restful

/user/1 | GET | 获取id=1的User || /user/1 | DELETE | 删除id为1的user || /user | PUT | 修改user || /user | POST | 添加user |请求方式共有其中,其中对应的就是HttpServlet中的七个方法:Tips:目前我们的jsp、html,都只支持get、post。

2401_85192383的博客 469

Spring MVC 的JSON 数据交互 和RESTful支持

JSON数据交互 JSON概述 JSON与 XML 非常相似,都是用于存储数据的,但是JSON 相对于XML来说,解析速度更快,占用空间更小,因此在实际开发中,使用 JSON式的数据进行前后台的数据交互是很常见的。 JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。 J

共勉 1359

Spring MVC之JSON数据交互和RESTful的支持(学习)

学习目标:了解 JSON 的数据结构 掌握 Spring MVC中的 JSON 数据交互的使用 熟悉 RESTful 风格的请求样式 掌握 Spring MVC中的 RESTf ul 风格请求的使用 1.JSON概述 1.1 什么是JSON SON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C+...

qq_42500186的博客 430

java restful json_Spring MVC之JSON数据交互和RESTful的支持

1.JSON概述1.1 什么是JSONJSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。1.2 JSON的特点JSON与XML非常相似,都是用来存储数据的,并...

weixin_35995377的博客 302

Spring MVC之JSON数据交互和RESTful的支持

1.JSON概述 1.1 什么是JSON JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。 1.2 JSON的特点 JSON与XML非常相似

别皱眉 611

06【SpringMVC的Restful支持】_关于spring mvc支持的restful(1)

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源接收get请求@PostMapping:接收post请求@DeleteMapping:接收delete请求@PutMapping:接收put请求。

2401_85192383的博客 446
上一篇: 书籍集锦——关于深度学习
下一篇: SPRING MVC 的请求参数获取的几种方法
Carlos Chan
博客等级 码龄14年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值