springboot RestTemple 发送post请求

Springboot使用RestTemplate发送Post请求postForEntity (application/x-www-form-urlencoded) Springboot使用RestTemplate发送Post请求postForEntity[application/x-www-form-urlencoded] 背景思路正文ServiceRestTemplate 使用 postForEntity 请求接口基于xml系列注解解析XML返回值XML的一些基本常识实体类与xml文件对应实体代码参考博客 背景 对接请求为(application/x-www-form-urlencoded),返回XML格式接口。 思路 ServiceRestTemplate 使用 阅读详情
AI摘要

本文详细介绍了在SpringBoot项目中如何使用RestTemplate发送POST请求,包括依赖引入、配置类编写、POST请求的两种方法(postForObject和postForEntity)、请求头设置、参数传递方式(实体对象、MultiValueMap、HttpEntity)以及接收Controller的示例。

一、引入依赖

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、配置类

RestTemplateConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    //@LoadBalanced
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return new RestTemplate();
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(60000); // ms
        factory.setConnectTimeout(60000); // ms
        return factory;
    }
}

三、post请求

1、post请求说明

RestTemplate的post请求包含两个主要方法:

postForObject():返回body对象
postForEntity():返回全部的信息,包括状态码,body,header

RestTemplate.java

参数和get请求的相比,就多了第二个参数(Object request),如果使用最后一个参数传参时,和get请求类似,request设置为null就可以,如果使用第二个参数传参时,就需要考虑request的类型,request参数类型必须是实体对象、MultiValueMap、HttpEntity对象的的一种,其他不可以!!!

  • 实体对象传参时,被请求的接口方法上必须使用@RequestBody,接收参数为实体或者Map;
  • HttpEntity传参时,取决于HttpEntity对象的第一个参数,可以为任何类型,包括HashMap;
  • MultiValueMap传参时,接收参数使用注解@RequestBody时,使用一个String类型、名称随意,使用@RequestParam时,使用对应个数的String类型字符串,名称必须和map中的key相同;推荐使用@RequestParam

2、发送post请求,header设置,(发送对象)

import com.company.feishu.FeishuApplication;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.*;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试RestTemplate
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = FeishuApplication.class)
@Slf4j
public class AuthTest {

	@Autowired
	private RestTemplate restTemplate;

	//@Before //import org.junit.Before;
	//@BeforeEach //import org.junit.jupiter.api.BeforeEach;
	@Before
	public void config() {

	}

	@Test
	public void testPostFrom() {
		// 请求地址
		String url = "http://localhost/auth/testPostForm";

		// 请求头设置,x-www-form-urlencoded格式的数据
		HttpHeaders headers = new HttpHeaders();
		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //提交表单数据

		// 提交表单数据参数设置
		MultiValueMap map = new LinkedMultiValueMap<>();
		map.add("param1", "参数1");
		map.add("param2", "参数2");

		// 组装请求体(指定第一个参数的泛型)
		HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);

		// postForObject发起请求
		String str = restTemplate.postForObject(url, request, String.class);
		System.out.println(str);

		// postForEntity发起请求
		// String.class指定返回的Body的类型
		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
		//ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, request, JSONObject.class);
		System.out.println(responseEntity.getStatusCode().value());
		System.out.println(responseEntity.getBody());
		System.out.println(responseEntity.getHeaders().getContentType());

	}

	@Test
	public void testPostMapJson() {
		//请求地址
		String url = "http://localhost/auth/testPostMap";
		//String url = "http://localhost/auth/testPostJson";

		// 请求头设置
		HttpHeaders headers = new HttpHeaders();
		//headers.setContentType(MediaType.APPLICATION_JSON); //提交json数据
		headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //提交json数据

		// 提交json数据(map)
		Map<String, String> map = new HashMap<>();
		map.put("app_id", "cli_a615cbb9bf123456");
		map.put("app_secret", "rjBwrcUIwuQoFnsFyixwqePHVabcdef");

		// 组装请求体(指定第一个参数的泛型)
		HttpEntity<Map<String, String>> request = new HttpEntity<>(map, headers);

		// 提交json数据
		//JSONObject jsonParam = new JSONObject();
		//jsonParam.put("app_id", "cli_a615cbb9bf123456");
		//jsonParam.put("app_secret", "rjBwrcUIwuQoFnsFyixwqePHVabcdef");
		//HttpEntity<JSONObject> request = new HttpEntity<>(jsonParam, headers);

		// postForObject发起请求
		String str = restTemplate.postForObject(url, request, String.class);
		System.out.println(str);

		// postForEntity发起请求
		// String.class指定返回的Body的类型
		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
		//ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, request, JSONObject.class);
		System.out.println(responseEntity.getStatusCode().value());
		System.out.println(responseEntity.getBody());
		System.out.println(responseEntity.getHeaders().getContentType());

	}

}

        也可以用exchange方法

3、接收Controller示例

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

/**
 * 测试Controller
 */
@Controller
@RequestMapping("/auth")
@Slf4j
public class AuthController {

    // http://localhost/auth/testPostForm
    @RequestMapping("/testPostForm")
    @ResponseBody
    public String testPost1(@RequestParam(name = "param1") String param1, @RequestParam(name = "param2") String param2) {
        log.info("param1:"+param1);
        log.info("param2:"+param2);
        return "OK";
    }

    @RequestMapping("/testPostMap")
    @ResponseBody
    public String testPost2(@RequestBody Map<String, Object> reqMap) {
        String appId = (String)reqMap.get("app_id");
        String appSecret = (String)reqMap.get("app_secret");
        log.info("appId:"+appId);
        log.info("appSecret:"+appSecret);
        return "OK";
    }

    @RequestMapping("/testPostJson")
    @ResponseBody
    public JSONObject testPost3(@RequestBody JSONObject jsonObject) {
        String appId = jsonObject.getString("app_id");
        String appSecret = jsonObject.getString("app_secret");
        log.info("appId:"+appId);
        log.info("appSecret:"+appSecret);
        JSONObject resp = new JSONObject();
        resp.put("code", 0);
        resp.put("msg", "");
        return resp;
    }
    
}

四、参考:

RestTemplate-postForObject详解、调用Https接口、源码解析,读懂这一篇文章就够了

Spring之RestTemplate详解

Springboot通过RestTemplate发送post请求并且发送文件数据 由于项目需要与外部接口对接,所以需要使用到restTemplate来发送请求,而存在某一个接口需要接受文件类型数据,这种接口参数一般都是通过form-data来接受的,实际上并不难,但是我在写的时候一直报错,最后发现是项目中配置好的restTemplate中发送post请求会将参数打印出来,而参数中包含文件,使用的是JSONObject.toJSONString(),故一直报错,于是打算写此文章记录一下。 阅读详情

相关推荐

springboot 网络请求方法汇总 post

springboot的网络请求方法,post请求,带参,带header 一. RestTemplate 1. 返回数据类: public class ResultVO<T> { private Integer code; private String msg; private T result; public ResultVO() { } public ResultVO(Integer code, String msg) {

liuye066的专栏 2314

restTemplate 发送post请求

restTemplate 发送get/post请求 restemplate发送post请求获取阿里云短信验证码向阿里云发送post请求获取短信验证码测试 java.lang.IllegalStateException: No instances available for dfsns.market.alicloudapi.com

dj1955的博客 5万+

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 520

SpringBoot-30-RestTemplate的Post详解

SpringBoot-30-RestTemplate的Post详解RestTemplate的Htttp Post请求我们经常使用下面两个方法:postForObject():返回Http协议的响应体postForEntity():返回ResponseEntity,ResponseEntity对Http进行了封装,除了包含响应体以外,还包含Http状态码、contentType、Header等信息。postForObject()方法的使用 发送Json格式我们还是使用免费接口地址http://jsonplac

zhoubangbang1的博客 3009

从零部署思澈科技SiFli-Solution:避坑指南与实战排错

本文详细介绍了从零部署思澈科技SiFli-Solution开发环境的完整流程与实战排错指南。重点解析了Keil uVision5版本选择、Butterfli工具路径配置等关键步骤,并针对Keil路径报错、函数冲突等高频问题提供了具体解决方案,帮助开发者高效避坑,快速搭建稳定的嵌入式开发环境。

devops8pract的博客 530

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1005

SpringBoot之RestTemple介绍

在写项目于中我们经常需要调用远程和HTTP接口,Spring官方提供了RestTemple类,使我们发送HTTP请求更加便捷。我们学习RestTemple之前我们看看官方文档是怎么描述的。RestTemplate是一个同步的HTTP请求客户端,通过在JDK的HttpURLConnection、Apache HttpComponents等底层HTTP客户端库上暴露简单的模板方法API,使得进行HTTP请求变得更加便捷。

okay_ing的博客 710

c#源码,将矩阵(二维数组)渲染成云图,强度图,热力图,均匀性图,伪彩图

优快云软件0积分下载链接:https://download.youkuaiyun.com/download/wanghuannihao1992/86656759。6、渲染效果良好,颜色均匀分布,不存在等高线,交叉点。3、纯粹的C#代码编写,不含第三方dll或者控件。4、支持ColorBar显示,强度值颜色坐标显示。2、渲染时间60ms左右,速度快,1、二维数据最小支持2*2,7、采样全新数据插值算法。先直接上C#软件效果图。5、整图保存为单个图片。

业余程序员小徐的博客 6883

RestTemplate发送post请求服务

package com.test.bank.util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.spri

weixin_42060837的博客 195

【模拟IC】从VCD到VEC:Cadence数模混合仿真中高效激励转换与HSIM工具链实战

本文详细解析了在Cadence数模混合仿真中,如何利用HSIM工具链的vcd2vec命令,将数字仿真生成的VCD文件高效转换为模拟仿真器所需的VEC格式激励文件。文章提供了从VCD文件预处理、io_top.sig文件编写、核心命令参数详解到Cadence ADE环境集成验证的全链路实战指南,并分享了自动化脚本方案,旨在解决数模混合验证中的“语言不通”难题,提升仿真效率。

k9l0m1的博客 122

STM32F103 RTC闹钟唤醒Stop模式的EXTI17中断实现

本文详细介绍了STM32F103如何通过RTC闹钟触发EXTI17中断实现从Stop模式的高效唤醒。针对低功耗应用场景,提供了完整的硬件配置、CubeMX设置及代码实现方案,包括时间格式转换、中断处理和功耗优化技巧,帮助开发者可靠实现定时唤醒功能。

ol78901234的博客 231

第十课:springboot 通过RestTemple实现http接口调用

简介 项目中关于RestTemple的简单的get/post请求的方法就不进行过多的介绍,本案例中主要介绍各种请求参数逇传递 表单数据/json格式的数据传递, 请求的响应信息的处理;比如响应的信息是List 如果不做处理的话RestTemple 默认将信息处理成List 格式的数据,类似的这种如何处理;还有碰到页面端或者需要将本地的文件File或者MultipartFile 当成请求参数请求下游的http接口内容; 或者下游的响应回文件给我们 如何实现流传递和下载到本地或者输出到浏览器; 案例里面都会有代

weixin_43812522的博客 1913

手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS)

通过动态电压和频率调整(DVFS),可以有效地管理GPU SoC的功耗和热管理。合理的DVFS策略不仅可以节省功耗,提高能效,还可以延长设备的使用寿命。

MHD0815的博客 1499

springboot 直接转发调用_第十课:springboot 通过RestTemple实现http接口调用

简介项目中关于RestTemple的简单的get/post请求的方法就不进行过多的介绍,本案例中主要介绍各种请求参数逇传递 表单数据/json格式的数据传递, 请求的响应信息的处理;比如响应的信息是List 如果不做处理的话RestTemple 默认将信息处理成List 格式的数据,类似的这种如何处理;还有碰到页面端或者需要将本地的文件File或者MultipartFile 当成请求参数请求下游的...

weixin_31642531的博客 919

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 802

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot学习8.1-RestTemplate请求rest风格后端

1.RestTemplate RestTemplate的底层是通过HttpURLConnection实现的(注意:java.net.HttpURLConnection.setRequestMethod 不支持PATCH方法,无法将请求发送出去)。参考文章 访问已经创建好的rest风格后端。这里使用SpringBoot学习8.0-创建REST风格站点介绍的后端代码。 2.RestTemplat...

echo的博客 357

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Springboot微服务之间调用RestTemplate中几种常见的请求和传参数方式

Springboot微服务之间调用RestTemplate中几种常见的请求和传参数方式 get 第一种:getForEntity getForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。比如下面一个例子: @RequestMapping("/gethello") public String getHello() { Re

sunrj_niu的博客 2047

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

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

spring boot单元测试之RestTemplate(二)

上篇博客中,简单介绍了RestTemplate,只是用到了单元测试环节,如果在正式开发环境使用RestTemplate调用远程接口,还有一些配置要做。 一、配置类 由于Spring boot没有对RestTemplate做自动配置,所以我们需要写一个配置类引入RestTemplate。 @Configuration public class RestTemplateConfig { ...

weixin_30697239的博客 246

RestTemplate配置

既然我们想使用RestTemplate,那么我们就必须要将RestTemplate注入到Spring容器之中,所以我们在启动类中注入我们的RestTemplate。这里我们就可以在我们需要调用第三方接口的controller里面注入我们RestTemplate了。这样我们就能够正常的使用RestTemplate。

CVPR收割机的博客 321

springboot 发送post请求

springboot 发送post请求 import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; public static String sendPOSTRequest(String url, MultiValueMap<String, String> params) { RestTemplate client = new RestTe

whale_ao的博客 1万+

springboot中使用RestTemplate发送post请求

springboot中使用RestTemplate发送post请求

wodebokecsdn的博客 1703

【springboot进阶】RestTemplate进阶封装常用请求方式

对RestTemplate再进一步封装出符合form-data、x-www-form-urlencoded、json格式的请求方法,配合fastjson的序列化,将请求实体bean转换为请求参数,使远程调用方式更加优雅。

6072

springboot发送HTTP请求(POST)

springboot发送HTTP请求

qq_44719458的博客 1859

spring-boot中使用RestTemplate发送post请求

在有@service注解类中,自动装载。

fymsnow的专栏 1441

Springboot发送post请求的几种方式

【代码】Springboot发送post请求的几种方式。

qq_42607375的博客 2718

SpringBoot get/post请求详解

SpringBoot get/post请求详解

漂泊小柒的专栏 7912
上一篇: idea项目关闭版本控制,断开git连接 gitlab
下一篇: ThinkPad E440 开启反复重启,开机失败
躁动的青年
博客等级 码龄16年 180粉丝 925原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值