RestTemplate 常用方法(提供了多种方法来发送 HTTP 请求)
RestTemplate 是 Spring 框架中用于同步客户端 HTTP 请求的一个类,它提供了多种方法来发送 HTTP 请求。以下是一些常用的 RestTemplate 方法及其代码案例:
1.postForObject()
该方法用于发送 POST 请求,并期望返回一个对象。以下是一个使用 postForObject 的示例:
RestTemplate restTemplate = new RestTemplate();
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));
Foo foo = restTemplate.postForObject(fooResourceUrl, request, Foo.class);
Assertions.assertNotNull(foo);
Assertions.assertEquals(foo.getName(), "bar");
-
RestTemplate restTemplate = new RestTemplate();:创建了RestTemplate的一个实例,用于执行 HTTP 请求。 -
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个HttpEntity对象,它包含了要发送的数据(在这个例子中是一个Foo对象,其构造函数接收一个字符串参数 "bar")和 HTTP 头部信息(在这个例子中头部信息是空的,因为HttpEntity的构造函数没有接收任何头部信息参数)。 -
Foo foo = restTemplate.postForObject(fooResourceUrl, request, Foo.class);:使用postForObject方法发送 POST 请求到fooResourceUrl指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体和头部信息的HttpEntity对象,第三个参数是期望返回的对象类型,这里期望返回一个Foo类型的对象。 -
Assertions.assertNotNull(foo);:使用断言来检查返回的foo对象是否不为null,确保请求成功并且得到了响应。 -
Assertions.assertEquals(foo.getName(), "bar");:再次使用断言来检查返回的foo对象的name属性是否等于 "bar",确保返回的对象包含了正确的数据。
2. postForLocation()
该方法用于发送 POST 请求,不返回完整的资源,只返回新创建资源的位置:
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));
URI location = restTemplate.postForLocation(fooResourceUrl, request);
Assertions.assertNotNull(location);
这段代码展示了如何使用 RestTemplate 发送一个 POST 请求,并期望服务器响应中包含新创建资源的 URI。以下是代码的详细解释:
-
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个HttpEntity对象,它包含了要发送的数据(在这个例子中是一个Foo对象,其构造函数接收一个字符串参数 "bar")。HttpEntity对象不仅包含请求体,还可以包含请求头信息,但在这个例子中没有显式设置任何请求头。 -
URI location = restTemplate.postForLocation(fooResourceUrl, request);:使用postForLocation方法发送 POST 请求到fooResourceUrl指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体的HttpEntity对象。与postForObject方法不同,postForLocation方法不期望返回一个响应体,而是期望返回新创建资源的 URI。这个方法返回一个URI对象,表示新创建资源的位置。 -
Assertions.assertNotNull(location);:使用断言来检查返回的location对象是否不为null,确保请求成功并且服务器返回了新资源的位置。
这个示例假设服务端接收 POST 请求后,会处理请求体中的数据,并创建一个新的资源。然后,服务器会在响应中包含一个 Location 头,指示新创建资源的 URI。RestTemplate 会自动从响应头中提取这个 Location 值,并将其作为 URI 对象返回。
3. exchange()
exchange 方法是一个更通用的 POST 请求方法,允许更灵活的请求配置:
RestTemplate restTemplate = new RestTemplate();
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));
ResponseEntity<Foo> response = restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, Foo.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.CREATED);
Foo foo = response.getBody();
Assertions.assertNotNull(foo);
Assertions.assertEquals(foo.getName(), "bar");
这段代码展示了如何使用 RestTemplate 发送一个 POST 请求,并检查响应状态码以及响应体。以下是代码的详细解释:
-
RestTemplate restTemplate = new RestTemplate();:创建了RestTemplate的一个实例,用于执行 HTTP 请求。 -
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个HttpEntity对象,它包含了要发送的数据(在这个例子中是一个Foo对象,其构造函数接收一个字符串参数 "bar")。HttpEntity对象不仅包含请求体,还可以包含请求头信息,但在这个例子中没有显式设置任何请求头。 -
ResponseEntity<Foo> response = restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, Foo.class);:使用exchange方法发送 POST 请求到fooResourceUrl指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是请求的方法(这里是HttpMethod.POST),第三个参数是包含请求体和头部信息的HttpEntity对象,第四个参数是期望返回的对象类型,这里期望返回一个Foo类型的对象。exchange方法返回一个ResponseEntity对象,它包含了响应的状态码、响应头、响应体等信息。 -
Assertions.assertEquals(response.getStatusCode(), HttpStatus.CREATED);:使用断言来检查响应的状态码是否等于HttpStatus.CREATED(201),这通常表示资源创建成功。 -
Foo foo = response.getBody();:从ResponseEntity对象中获取响应体,这里期望是一个Foo类型的对象。 -
Assertions.assertNotNull(foo);:使用断言来检查返回的foo对象是否不为null,确保请求成功并且得到了响应。 -
Assertions.assertEquals(foo.getName(), "bar");:再次使用断言来检查返回的foo对象的name属性是否等于 "bar",确保返回的对象包含了正确的数据。
4. 提交表单数据
使用 POST 方法提交表单数据,需要将 Content-Type 头设置为 application/x-www-form-urlencoded:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("id", "1");HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
ResponseEntity<String> response = restTemplate.postForEntity(fooResourceUrl+"/form", request, String.class);
Assertions.assertEquals(response.getStatusCode(), HttpStatus.CREATED);
这段代码展示了如何使用 RestTemplate 发送一个包含表单数据的 POST 请求,并验证响应状态码。以下是代码的详细解释:
-
HttpHeaders headers = new HttpHeaders();:创建了一个HttpHeaders对象,用于设置 HTTP 请求的头部信息。 -
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);:设置请求的Content-Type头部为application/x-www-form-urlencoded,这表明请求体中的数据是 URL 编码的表单数据。 -
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();:创建了一个LinkedMultiValueMap实例,用于存储表单数据。LinkedMultiValueMap允许每个键对应多个值,但在这个例子中,我们只添加了一个值。 -
map.add("id", "1");:向map中添加了一个键值对,键是 "id",值是 "1"。 -
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);:创建了一个HttpEntity对象,它包含了表单数据(map)和头部信息(headers)。 -
ResponseEntity<String> response = restTemplate.postForEntity(fooResourceUrl+"/form", request, String.class);:使用postForEntity方法发送 POST 请求到fooResourceUrl+"/form"指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体和头部信息的HttpEntity对象,第三个参数是期望返回的对象类型,这里期望返回一个String类型的对象。postForEntity方法返回一个ResponseEntity对象,它包含了响应的状态码、响应头、响应体等信息。 -
Assertions.assertEquals(response.getStatusCode(), HttpStatus.CREATED);:使用断言来检查响应的状态码是否等于HttpStatus.CREATED(201),这通常表示资源创建成功。`
5. optionsForAllow()
使用 optionsForAllow 方法来获取指定 URL 上允许的操作(请求方法):
Set<HttpMethod> optionsForAllow = restTemplate.optionsForAllow(fooResourceUrl);
HttpMethod[] supportedMethods = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE};
Assertions.assertTrue(optionsForAllow.containsAll(Arrays.asList(supportedMethods)));
这段代码使用了 RestTemplate 的 optionsForAllow 方法来查询指定资源 URL 支持的 HTTP 方法,并验证这些方法是否包含在特定的一组方法中。以下是代码的详细解释:
-
Set<HttpMethod> optionsForAllow = restTemplate.optionsForAllow(fooResourceUrl);:调用optionsForAllow方法发送一个 HTTP OPTIONS 请求到fooResourceUrl指定的 URL。这个方法返回一个Set<HttpMethod>,包含了服务器声明该资源支持的所有 HTTP 方法。 -
HttpMethod[] supportedMethods = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE};:定义了一个HttpMethod数组,包含了你期望服务器支持的方法。 -
Assertions.assertTrue(optionsForAllow.containsAll(Arrays.asList(supportedMethods)));:使用断言来检查第一步中获取的Set<HttpMethod>是否包含了第二步中定义的所有 HTTP 方法。containsAll方法会检查集合是否包含指定集合中的所有元素。
这个示例假设你想要验证服务器是否支持 GET、POST、PUT 和 DELETE 这四种常见的 HTTP 方法。如果服务器对 fooResourceUrl 资源的响应中包含了 Allow 头部,其中列出了支持的方法,那么 optionsForAllow 方法将解析这个头部并返回相应的 HttpMethod 集合。
6. 使用 PUT 请求更新资源
使用 exchange() 发起简单的 PUT 请求,该请求没有响应体:
Foo updatedInstance = new Foo("newName");
updatedInstance.setId(createResponse.getBody().getId());
String resourceUrl = fooResourceUrl + '/' + createResponse.getBody().getId();
HttpEntity<Foo> requestUpdate = new HttpEntity<>(updatedInstance, headers);
template.exchange(resourceUrl, HttpMethod.PUT, requestUpdate, Void.class);
这段代码展示了如何使用 RestTemplate 发送一个 HTTP PUT 请求来更新服务器上的资源。以下是代码的详细解释:
-
Foo updatedInstance = new Foo("newName");:创建了一个新的Foo实例,并将其属性设置为 "newName"。 -
updatedInstance.setId(createResponse.getBody().getId());:从之前创建资源时获得的响应(createResponse)中获取资源的 ID,并将其设置为更新实例的 ID。这确保了更新操作是针对特定的资源。 -
String resourceUrl = fooResourceUrl + '/' + createResponse.getBody().getId();:构建了包含资源 ID 的完整 URL,用于指定要更新的资源。 -
HttpEntity<Foo> requestUpdate = new HttpEntity<>(updatedInstance, headers);:创建了一个HttpEntity对象,它包含了要更新的Foo实例和之前定义的 HTTP 头部信息(headers)。 -
template.exchange(resourceUrl, HttpMethod.PUT, requestUpdate, Void.class);:使用exchange方法发送 PUT 请求到构建的资源 URL。这个方法的第一个参数是请求的 URL,第二个参数是请求的方法(这里是HttpMethod.PUT),第三个参数是包含请求体和头部信息的HttpEntity对象,第四个参数是期望返回的对象类型,这里使用Void.class表示不期望返回任何内容(即服务器应该返回状态码,但不返回响应体)。
这个示例假设服务端接收 PUT 请求后,会处理请求体中的数据,并更新指定 ID 的资源。通常,PUT 请求用于发送资源的完整更新,而 PATCH 请求用于发送资源的部分更新。
请注意,这段代码中的 createResponse 是之前某个创建资源操作的响应,它包含了新创建资源的 ID。此外,headers 是之前定义的 HttpHeaders 实例,它可能包含了如 Content-Type 等必要的头部信息。
7. 上传文件
上传文件时,Content-Type 为 multipart/form-data 类型。以下是上传单个文件的示例:
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/chat16/test/form2";
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file1", new FileSystemResource(".\\src\\main\\java\\com\\javacode2018\\springmvc\\chat16\\dto\\UserDto.java"));
HttpHeaders headers = new HttpHeaders();
headers.add("header1", "v1");
headers.add("header2", "v2");
RequestEntity<MultiValueMap<String, Object>> requestEntity = new RequestEntity<>(body, headers, HttpMethod.POST, URI.create(url));
ResponseEntity<Map<String, String>> responseEntity = restTemplate.exchange(requestEntity,new ParameterizedTypeReference<Map<String, String>>() {}
);
Map<String, String> result = responseEntity.getBody();
System.out.println(result);
这段代码展示了如何使用 RestTemplate 发送一个包含文件和其他表单数据的 HTTP POST 请求,并处理响应。以下是代码的详细解释:
-
RestTemplate restTemplate = new RestTemplate();:创建了RestTemplate的一个实例,用于执行 HTTP 请求。 -
String url = "http://localhost:8080/chat16/test/form2";:定义了请求的目标 URL。 -
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();:创建了一个MultiValueMap实例,用于存储请求体中的表单数据和文件。 -
body.add("file1", new FileSystemResource(".\\src\\main\\java\\com\\javacode2018\\springmvc\\chat16\\dto\\UserDto.java"));:向body中添加了一个文件。这里使用的是FileSystemResource,它表示一个文件系统中的资源。 -
HttpHeaders headers = new HttpHeaders();:创建了一个HttpHeaders对象,用于设置 HTTP 请求的头部信息。 -
headers.add("header1", "v1");和headers.add("header2", "v2");:向请求头部添加了两个自定义的头部字段。 -
RequestEntity<MultiValueMap<String, Object>> requestEntity = new RequestEntity<>(body, headers, HttpMethod.POST, URI.create(url));:创建了一个RequestEntity对象,它包含了请求体、头部信息、请求方法(这里是 POST)和请求的 URI。 -
ResponseEntity<Map<String, String>> responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<Map<String, String>>() {});:使用exchange方法发送请求并接收响应。这里使用了RequestEntity作为请求参数,并且指定了响应体期望的类型是一个Map<String, String>。 -
Map<String, String> result = responseEntity.getBody();:从响应实体中获取响应体,这里期望是一个Map类型的对象。 -
System.out.println(result);:打印出响应体的内容。
这个示例中,exchange 方法被用来发送一个包含文件和其他表单数据的 POST 请求。由于文件数据是多部分的,所以不需要手动设置 Content-Type 为 multipart/form-data,RestTemplate 会自动处理。但是,如果需要自定义多部分请求的边界,可以通过设置 HttpHeaders 的 Content-Type 属性来实现。
请注意,这段代码中的 new ParameterizedTypeReference<Map<String, String>>() {} 是一个泛型类型参考,它用于指定响应体的泛型类型。这是必要的,因为 Java 的类型擦除机制会在运行时移除泛型信息。
最后,确保服务器端的 URL 能够处理多部分表单数据,并且能够正确响应。如果服务器返回的不是 Map<String, String> 类型的数据,你需要修改 ParameterizedTypeReference 以匹配实际的响应类型。
相关文章:
RestTemplate 常用方法(提供了多种方法来发送 HTTP 请求)
RestTemplate 是 Spring 框架中用于同步客户端 HTTP 请求的一个类,它提供了多种方法来发送 HTTP 请求。以下是一些常用的 RestTemplate 方法及其代码案例: 1.postForObject() 该方法用于发送 POST 请求,并期望返回一个对象。以下是一个使用…...
常量和变量
常量 常量是指在程序中使用的一些具体的数、字符。在程序运行过程中,其值不能被更改。如123,145.88,m,TRUE等。常量,用于记录程序中不可更改的数据。 分类 1、整型常量,表示整数的常量。 表示形式: 1)十进制形…...
Go语言的使用
在安装Go和配置镜像时,可以根据操作系统和网络环境来选择适合的步骤。以下是详细的安装步骤和镜像配置: 1. 安装Go 1.1 通过官方下载 访问 Go的官方下载页面 下载适合操作系统的安装包(Windows、macOS 或 Linux)。安装包下载完…...
详解CRC校验原理以及FPGA实现
文章目录 一、什么是CRC校验?二、实现CRC校验原理以及步骤2.1 用多项式表示二元码数据2.2 选择一个生成多项式作为校验2.3 计算CRC校验码 三、CRC判断数据是否错误的原理以及步骤3.1 将收到的数据与生成多项式求余3.2 数据发生错误再进行CRC校验判断 四、FPGA实现CR…...
企业如何通过架构蓝图实现数字化转型
数字化转型的关键——架构蓝图的力量 在当今的商业世界,数字化转型已经不再是一个选择,而是企业生存与发展不可回避的战略行动。企业希望通过数字化提高效率、增强灵活性,并为客户提供更好的体验。然而,数字化转型不仅仅涉及技术…...
React第十三章(useTransition)
useTransition useTransition 是 React 18 中引入的一个 Hook,用于管理 UI 中的过渡状态,特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态,这样 React 可以优先处理更重要的更新,比如用户输入&#x…...
IDEA使用Maven Helper查看整个项目的jar冲突
在插件市场安装Maven Helper,安装好后,重启IDEA;双击打开可能存在jar冲突的pom文件;在右侧面板查看冲突,text是引入的依赖明细,点击Dependecy Analyzer选项卡即可查看冲突的jar。...
uniapp项目 存储数据到手机本地
打开manifest.json,在App权限配置中,添加读取和写入的权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&g…...
景联文科技医疗数据处理平台:强化医疗数据标注与管理,推动医疗数字化新篇章
随着医疗科技快速进步与广泛应用,医疗信息的规模正在迅速扩张,如何有效管理这些医疗数据成为了关键议题。 医疗数据不仅包括传统的纸质病历,还有电子病历、实验室检测结果、医学影像等多样化的数字信息。为确保这些数据能为临床决策、科研分析…...
vue使用高德地图实现轨迹显隐
<template><div><el-button type"primary" click"pathShowOrHide">轨迹显/隐</el-button><div id"container" /></div> </template><script> import AMapLoader from amap/amap-jsapi-loaderex…...
Maven(20) 如何使用Maven进行版本管理?
Maven提供了一套强大的版本管理机制,允许开发者管理项目的版本号,并在不同的版本之间进行升级和降级。以下是如何使用Maven进行版本管理的详细步骤和代码示例: 步骤 1: 定义项目版本 在pom.xml文件中,你需要定义项目的版本号。版…...
AWS RDS MySQL内存使用
1. AWS RDS所拥有的内存(实例类型),和数据库能够使用的内存是不同的。RDS实例为操作系统和 RDS 管理进程预留了内存,数据库使用内存大小,小于数据库实例类的硬件规格中所示的值(以 GiB 为单位)[…...
Vue指令:v-else、v-else-if
目录 1.语法: 2. 题目 3.页面展示 4.结构 1.语法: 1.作用:辅助v-if进行判断渲染 2.语法:v-else 、v-esle-if"表达式" 2. 题目 <!DOCTYPE html> <html lang"en"> <head><meta chars…...
基于SSM志愿者招募系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,志愿组织管理,组织信息管理,组织申请管理,志愿活动管理活动报名管理 用户账号功能包括:系统首页,个人中心,…...
数学建模与优化算法:从基础理论到实际应用
数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…...
微信小程序生成二维码
目前是在开发小程序端 --> 微信小程序。然后接到需求:根据 form 表单填写内容生成二维码(第一版:表单目前需要客户进行自己输入,然后点击生成按钮实时生成二维码,不需要向后端请求,不存如数据库…...
自由软件与开源软件:异同与联系
自由软件与开源软件:异同与联系 随着信息技术的快速发展,自由软件运动与开源软件运动成为推动软件开发领域变革的重要力量。虽然这两个概念在日常对话中常被交替使用,但它们各自有着不同的理念和发展历程。本文将探讨自由软件运动与开源软件…...
Vue中ref、reactive、toRef、toRefs的区别
一、ref、reactive setup 函数中默认定义的变量并不是响应式的(即数据变了以后页面不会跟着变),如果想让变量变为响应式的变量,需要使用 ref 和 reactive 函数修饰变量。 ref 函数可以把基本类型变量变为响应式引用reactive 函数…...
凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。
图1:同步发电机稳态相量图 若发电机为凸极式,由于凸极机正、交轴同步电抗不等,即xd≠xq,因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙QE˙q−(xd−xq)…...
systemctl restart NetworkManager 重启后,文件/etc/resolv.conf修改失败
如果你在重启 NetworkManager 之后发现无法修改 /etc/resolv.conf 文件,这是因为 NetworkManager 会自动管理这个文件 为了解决这个问题,你可以采取以下两种方法之一: 方法一:禁用 NetworkManager 服务 使用以下命令停止 NetworkManager 服务:sudo systemctl stop Netwo…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
