当前位置: 首页 > news >正文

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");
  1. RestTemplate restTemplate = new RestTemplate();:创建了 RestTemplate 的一个实例,用于执行 HTTP 请求。

  2. HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个 HttpEntity 对象,它包含了要发送的数据(在这个例子中是一个 Foo 对象,其构造函数接收一个字符串参数 "bar")和 HTTP 头部信息(在这个例子中头部信息是空的,因为 HttpEntity 的构造函数没有接收任何头部信息参数)。

  3. Foo foo = restTemplate.postForObject(fooResourceUrl, request, Foo.class);:使用 postForObject 方法发送 POST 请求到 fooResourceUrl 指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体和头部信息的 HttpEntity 对象,第三个参数是期望返回的对象类型,这里期望返回一个 Foo 类型的对象。

  4. Assertions.assertNotNull(foo);:使用断言来检查返回的 foo 对象是否不为 null,确保请求成功并且得到了响应。

  5. 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。以下是代码的详细解释:

  1. HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个 HttpEntity 对象,它包含了要发送的数据(在这个例子中是一个 Foo 对象,其构造函数接收一个字符串参数 "bar")。HttpEntity 对象不仅包含请求体,还可以包含请求头信息,但在这个例子中没有显式设置任何请求头。

  2. URI location = restTemplate.postForLocation(fooResourceUrl, request);:使用 postForLocation 方法发送 POST 请求到 fooResourceUrl 指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体的 HttpEntity 对象。与 postForObject 方法不同,postForLocation 方法不期望返回一个响应体,而是期望返回新创建资源的 URI。这个方法返回一个 URI 对象,表示新创建资源的位置。

  3. 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 请求,并检查响应状态码以及响应体。以下是代码的详细解释:

  1. RestTemplate restTemplate = new RestTemplate();:创建了 RestTemplate 的一个实例,用于执行 HTTP 请求。

  2. HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));:创建了一个 HttpEntity 对象,它包含了要发送的数据(在这个例子中是一个 Foo 对象,其构造函数接收一个字符串参数 "bar")。HttpEntity 对象不仅包含请求体,还可以包含请求头信息,但在这个例子中没有显式设置任何请求头。

  3. ResponseEntity<Foo> response = restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, Foo.class);:使用 exchange 方法发送 POST 请求到 fooResourceUrl 指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是请求的方法(这里是 HttpMethod.POST),第三个参数是包含请求体和头部信息的 HttpEntity 对象,第四个参数是期望返回的对象类型,这里期望返回一个 Foo 类型的对象。exchange 方法返回一个 ResponseEntity 对象,它包含了响应的状态码、响应头、响应体等信息。

  4. Assertions.assertEquals(response.getStatusCode(), HttpStatus.CREATED);:使用断言来检查响应的状态码是否等于 HttpStatus.CREATED(201),这通常表示资源创建成功。

  5. Foo foo = response.getBody();:从 ResponseEntity 对象中获取响应体,这里期望是一个 Foo 类型的对象。

  6. Assertions.assertNotNull(foo);:使用断言来检查返回的 foo 对象是否不为 null,确保请求成功并且得到了响应。

  7. 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 请求,并验证响应状态码。以下是代码的详细解释:

  1. HttpHeaders headers = new HttpHeaders();:创建了一个 HttpHeaders 对象,用于设置 HTTP 请求的头部信息。

  2. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);:设置请求的 Content-Type 头部为 application/x-www-form-urlencoded,这表明请求体中的数据是 URL 编码的表单数据。

  3. MultiValueMap<String, String> map = new LinkedMultiValueMap<>();:创建了一个 LinkedMultiValueMap 实例,用于存储表单数据。LinkedMultiValueMap 允许每个键对应多个值,但在这个例子中,我们只添加了一个值。

  4. map.add("id", "1");:向 map 中添加了一个键值对,键是 "id",值是 "1"。

  5. HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);:创建了一个 HttpEntity 对象,它包含了表单数据(map)和头部信息(headers)。

  6. ResponseEntity<String> response = restTemplate.postForEntity(fooResourceUrl+"/form", request, String.class);:使用 postForEntity 方法发送 POST 请求到 fooResourceUrl+"/form" 指定的 URL。这个方法的第一个参数是请求的 URL,第二个参数是包含请求体和头部信息的 HttpEntity 对象,第三个参数是期望返回的对象类型,这里期望返回一个 String 类型的对象。postForEntity 方法返回一个 ResponseEntity 对象,它包含了响应的状态码、响应头、响应体等信息。

  7. 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)));

这段代码使用了 RestTemplateoptionsForAllow 方法来查询指定资源 URL 支持的 HTTP 方法,并验证这些方法是否包含在特定的一组方法中。以下是代码的详细解释:

  1. Set<HttpMethod> optionsForAllow = restTemplate.optionsForAllow(fooResourceUrl);:调用 optionsForAllow 方法发送一个 HTTP OPTIONS 请求到 fooResourceUrl 指定的 URL。这个方法返回一个 Set<HttpMethod>,包含了服务器声明该资源支持的所有 HTTP 方法。

  2. HttpMethod[] supportedMethods = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE};:定义了一个 HttpMethod 数组,包含了你期望服务器支持的方法。

  3. 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 请求来更新服务器上的资源。以下是代码的详细解释:

  1. Foo updatedInstance = new Foo("newName");:创建了一个新的 Foo 实例,并将其属性设置为 "newName"。

  2. updatedInstance.setId(createResponse.getBody().getId());:从之前创建资源时获得的响应(createResponse)中获取资源的 ID,并将其设置为更新实例的 ID。这确保了更新操作是针对特定的资源。

  3. String resourceUrl = fooResourceUrl + '/' + createResponse.getBody().getId();:构建了包含资源 ID 的完整 URL,用于指定要更新的资源。

  4. HttpEntity<Foo> requestUpdate = new HttpEntity<>(updatedInstance, headers);:创建了一个 HttpEntity 对象,它包含了要更新的 Foo 实例和之前定义的 HTTP 头部信息(headers)。

  5. 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 请求,并处理响应。以下是代码的详细解释:

  1. RestTemplate restTemplate = new RestTemplate();:创建了 RestTemplate 的一个实例,用于执行 HTTP 请求。

  2. String url = "http://localhost:8080/chat16/test/form2";:定义了请求的目标 URL。

  3. MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();:创建了一个 MultiValueMap 实例,用于存储请求体中的表单数据和文件。

  4. body.add("file1", new FileSystemResource(".\\src\\main\\java\\com\\javacode2018\\springmvc\\chat16\\dto\\UserDto.java"));:向 body 中添加了一个文件。这里使用的是 FileSystemResource,它表示一个文件系统中的资源。

  5. HttpHeaders headers = new HttpHeaders();:创建了一个 HttpHeaders 对象,用于设置 HTTP 请求的头部信息。

  6. headers.add("header1", "v1");headers.add("header2", "v2");:向请求头部添加了两个自定义的头部字段。

  7. RequestEntity<MultiValueMap<String, Object>> requestEntity = new RequestEntity<>(body, headers, HttpMethod.POST, URI.create(url));:创建了一个 RequestEntity 对象,它包含了请求体、头部信息、请求方法(这里是 POST)和请求的 URI。

  8. ResponseEntity<Map<String, String>> responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<Map<String, String>>() {});:使用 exchange 方法发送请求并接收响应。这里使用了 RequestEntity 作为请求参数,并且指定了响应体期望的类型是一个 Map<String, String>

  9. Map<String, String> result = responseEntity.getBody();:从响应实体中获取响应体,这里期望是一个 Map 类型的对象。

  10. System.out.println(result);:打印出响应体的内容。

这个示例中,exchange 方法被用来发送一个包含文件和其他表单数据的 POST 请求。由于文件数据是多部分的,所以不需要手动设置 Content-Typemultipart/form-dataRestTemplate 会自动处理。但是,如果需要自定义多部分请求的边界,可以通过设置 HttpHeadersContent-Type 属性来实现。

请注意,这段代码中的 new ParameterizedTypeReference<Map<String, String>>() {} 是一个泛型类型参考,它用于指定响应体的泛型类型。这是必要的,因为 Java 的类型擦除机制会在运行时移除泛型信息。

最后,确保服务器端的 URL 能够处理多部分表单数据,并且能够正确响应。如果服务器返回的不是 Map<String, String> 类型的数据,你需要修改 ParameterizedTypeReference 以匹配实际的响应类型。

相关文章:

RestTemplate 常用方法(提供了多种方法来发送 HTTP 请求)

RestTemplate 是 Spring 框架中用于同步客户端 HTTP 请求的一个类&#xff0c;它提供了多种方法来发送 HTTP 请求。以下是一些常用的 RestTemplate 方法及其代码案例&#xff1a; 1.postForObject() 该方法用于发送 POST 请求&#xff0c;并期望返回一个对象。以下是一个使用…...

常量和变量

常量 常量是指在程序中使用的一些具体的数、字符。在程序运行过程中&#xff0c;其值不能被更改。如123,145.88,m,TRUE等。常量&#xff0c;用于记录程序中不可更改的数据。 分类 1、整型常量&#xff0c;表示整数的常量。 表示形式&#xff1a;   1&#xff09;十进制形…...

Go语言的使用

在安装Go和配置镜像时&#xff0c;可以根据操作系统和网络环境来选择适合的步骤。以下是详细的安装步骤和镜像配置&#xff1a; 1. 安装Go 1.1 通过官方下载 访问 Go的官方下载页面 下载适合操作系统的安装包&#xff08;Windows、macOS 或 Linux&#xff09;。安装包下载完…...

详解CRC校验原理以及FPGA实现

文章目录 一、什么是CRC校验&#xff1f;二、实现CRC校验原理以及步骤2.1 用多项式表示二元码数据2.2 选择一个生成多项式作为校验2.3 计算CRC校验码 三、CRC判断数据是否错误的原理以及步骤3.1 将收到的数据与生成多项式求余3.2 数据发生错误再进行CRC校验判断 四、FPGA实现CR…...

企业如何通过架构蓝图实现数字化转型

数字化转型的关键——架构蓝图的力量 在当今的商业世界&#xff0c;数字化转型已经不再是一个选择&#xff0c;而是企业生存与发展不可回避的战略行动。企业希望通过数字化提高效率、增强灵活性&#xff0c;并为客户提供更好的体验。然而&#xff0c;数字化转型不仅仅涉及技术…...

React第十三章(useTransition)

useTransition useTransition 是 React 18 中引入的一个 Hook&#xff0c;用于管理 UI 中的过渡状态&#xff0c;特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态&#xff0c;这样 React 可以优先处理更重要的更新&#xff0c;比如用户输入&#x…...

IDEA使用Maven Helper查看整个项目的jar冲突

在插件市场安装Maven Helper&#xff0c;安装好后&#xff0c;重启IDEA&#xff1b;双击打开可能存在jar冲突的pom文件&#xff1b;在右侧面板查看冲突,text是引入的依赖明细&#xff0c;点击Dependecy Analyzer选项卡即可查看冲突的jar。...

uniapp项目 存储数据到手机本地

打开manifest.json&#xff0c;在App权限配置中&#xff0c;添加读取和写入的权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&g…...

景联文科技医疗数据处理平台:强化医疗数据标注与管理,推动医疗数字化新篇章

随着医疗科技快速进步与广泛应用&#xff0c;医疗信息的规模正在迅速扩张&#xff0c;如何有效管理这些医疗数据成为了关键议题。 医疗数据不仅包括传统的纸质病历&#xff0c;还有电子病历、实验室检测结果、医学影像等多样化的数字信息。为确保这些数据能为临床决策、科研分析…...

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提供了一套强大的版本管理机制&#xff0c;允许开发者管理项目的版本号&#xff0c;并在不同的版本之间进行升级和降级。以下是如何使用Maven进行版本管理的详细步骤和代码示例&#xff1a; 步骤 1: 定义项目版本 在pom.xml文件中&#xff0c;你需要定义项目的版本号。版…...

AWS RDS MySQL内存使用

1. AWS RDS所拥有的内存&#xff08;实例类型&#xff09;&#xff0c;和数据库能够使用的内存是不同的。RDS实例为操作系统和 RDS 管理进程预留了内存&#xff0c;数据库使用内存大小&#xff0c;小于数据库实例类的硬件规格中所示的值&#xff08;以 GiB 为单位&#xff09;[…...

Vue指令:v-else、v-else-if

目录 1.语法&#xff1a; 2. 题目 3.页面展示 4.结构 1.语法&#xff1a; 1.作用&#xff1a;辅助v-if进行判断渲染 2.语法&#xff1a;v-else 、v-esle-if"表达式" 2. 题目 <!DOCTYPE html> <html lang"en"> <head><meta chars…...

基于SSM志愿者招募系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;志愿组织管理&#xff0c;组织信息管理&#xff0c;组织申请管理&#xff0c;志愿活动管理活动报名管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;…...

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法&#xff0c;它们不仅帮助我们理解和描述复杂系统的行为&#xff0c;还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发&#xff0c;逐步深入到各种优化算法&#xff0c;并探讨它们在实际问题中的应用。 思维导图文件可获取&#xff1a;https:…...

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求&#xff1a;根据 form 表单填写内容生成二维码&#xff08;第一版&#xff1a;表单目前需要客户进行自己输入&#xff0c;然后点击生成按钮实时生成二维码&#xff0c;不需要向后端请求&#xff0c;不存如数据库&#xf…...

自由软件与开源软件:异同与联系

自由软件与开源软件&#xff1a;异同与联系 随着信息技术的快速发展&#xff0c;自由软件运动与开源软件运动成为推动软件开发领域变革的重要力量。虽然这两个概念在日常对话中常被交替使用&#xff0c;但它们各自有着不同的理念和发展历程。本文将探讨自由软件运动与开源软件…...

Vue中ref、reactive、toRef、toRefs的区别

一、ref、reactive setup 函数中默认定义的变量并不是响应式的&#xff08;即数据变了以后页面不会跟着变&#xff09;&#xff0c;如果想让变量变为响应式的变量&#xff0c;需要使用 ref 和 reactive 函数修饰变量。 ref 函数可以把基本类型变量变为响应式引用reactive 函数…...

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1&#xff1a;同步发电机稳态相量图 若发电机为凸极式&#xff0c;由于凸极机正、交轴同步电抗不等&#xff0c;即xd≠xq&#xff0c;因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…...

systemctl restart NetworkManager 重启后,文件/etc/resolv.conf修改失败

如果你在重启 NetworkManager 之后发现无法修改 /etc/resolv.conf 文件,这是因为 NetworkManager 会自动管理这个文件 为了解决这个问题,你可以采取以下两种方法之一: 方法一:禁用 NetworkManager 服务 使用以下命令停止 NetworkManager 服务:sudo systemctl stop Netwo…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...