SpringBoot使用RestTemplate发送Post请求

精讲RestTemplate-POST请求方法使用详解 前言: 其实POST请求方法和GET请求方法上大同小异,RestTemplate的POST请求也包含两个主要方法: postForObject() postForEntity() 二者的主要区别在于,postForObject()返回值是HTTP协议的响应体。postForEntity()返回的是ResponseEntity,ResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息。 一、post 阅读详情

Spring中有个RestTemplate类用来发送HTTP请求很方便,本文分享一个SpringBoot发送POST请求并接收返回数据的例子。

背景:用户信息放在8081端口的应用上,8082端口应用通过调用api,传递参数,从8081端口应用的数据库中获取用户的信息。

1.待访问的API

我要访问的api是 localhost:8081/authority/authorize,这个api需要传递三个参数,分别是domain(域名),account(用户账号),key(用户秘钥)。先用postman测试一下,返回结果如下:


分别展示了验证成功和验证失败的例子。

2.返回对象

ResultVO类是我构造的类,将会格式化api返回的数据,实现如下:

ResultVO.java

package com.seven.site.VO;

/**
 * @author: Seven.wk
 * @description: 数据返回类
 * @create: 2018/07/04
 */
public class ResultVO<T> {

    private Integer code;

    private String message;

    private T data;

    public ResultVO() {
    }

    public ResultVO(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public ResultVO(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    
}

3.将发送Post请求的部分封装如下:

Utils.java

package com.seven.site.utils;

import com.seven.site.VO.ResultVO;
import org.springframework.http.*;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;


/**
 * @author: Seven.wk
 * @description: 辅助工具类
 * @create: 2018/07/04
 */
public class Utils {

    /**
     * 向目的URL发送post请求
     * @param url       目的url
     * @param params    发送的参数
     * @return  ResultVO
     */
    public static ResultVO sendPostRequest(String url, MultiValueMap<String, String> params){
        RestTemplate client = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        HttpMethod method = HttpMethod.POST;
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //将请求头部和参数合成一个请求
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
        //执行HTTP请求,将返回的结构使用ResultVO类格式化
        ResponseEntity<ResultVO> response = client.exchange(url, method, requestEntity, ResultVO.class);

        return response.getBody();
    }

}

4.UserInfo对象

UserInfo.java

package com.seven.site.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

/**
 * @author: Seven.wk
 * @description: 用户信息实体
 * @create: 2018/07/04
 */
@Entity
public class UserInfo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer userId;         //用户标识id

    private String userName;        //用户姓名

    private String userAccount;         //用户账号

    private String userPassword;        //用户密码

    private Date createTime = new Date(System.currentTimeMillis());     //创建时间

    public UserInfo() {
    }

    public UserInfo(Object userAccount, Object userName) {
    }

    public UserInfo(String userAccount, String userName) {
        this.userName = userName;
        this.userAccount = userAccount;
    }

    public UserInfo(String userAccount, String userName, String userPassword) {
        this.userName = userName;
        this.userAccount = userAccount;
        this.userPassword = userPassword;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAccount() {
        return userAccount;
    }

    public void setUserAccount(String userAccount) {
        this.userAccount = userAccount;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userAccount='" + userAccount + '\'' +
                ", userPassword='" + userPassword + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}

5.在Service层封装将要发送的参数,并调用该方法,将返回的结果格式化成UserInfo对象,其中的异常处理部分就不详述了。

注:其中的URL地址一定要加上协议前缀(http,https等)

UserInfoServiceImpl.java

public UserInfo getUserInfoFromAuthority(String domain, String account, String key) {

    String authorizeUrl = "http://localhost:8081/authority/authorize";

    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
    params.add("domain", domain);
    params.add("account", account);
    params.add("key", key);

    //发送Post数据并返回数据
    ResultVO resultVo = Utils.sendPostRequest(authorizeUrl, params);

    if(resultVo.getCode() != 20){       //进行异常处理
        switch (resultVo.getCode()){
            case 17: throw new SiteException(ResultEnum.AUTHORIZE_DOMAIN_NOT_EXIST);
            case 18: throw new SiteException(ResultEnum.AUTHORIZE_USER_NOT_EXIST);
            case 19: throw new SiteException(ResultEnum.AUTHORIZE_USER_INFO_INCORRECT);
            default: throw new SiteException(ResultEnum.SYSTEM_ERROR);
        }
    }
    LinkedHashMap infoMap = (LinkedHashMap) resultVo.getData();
    return new UserInfo((String) infoMap.get("userAccount"), (String) infoMap.get("userName"), key);
}

6.在控制器中调用service中的方法,并返回数据

IndexController.java

/**
 * 获取用户信息
 * @param domain        域名
 * @param account       用户输入的账号
 * @param password      用户输入的密码
 * @return ResultVO
 */
@PostMapping("/getInfo")
@ResponseBody
public ResultVO getInfo(@RequestParam("domain") String domain,
                        @RequestParam("account") String account,
                        @RequestParam("password") String password) {
    UserInfo userInfo;
    try{
        userInfo = userInfoService.getUserInfoFromAuthority(domain, account, password);
    }catch(SiteException e){
        return new ResultVO(e.getCode(), e.getMessage());
    }
    return new ResultVO<>(20, "登录成功", userInfo);
}

7.测试效果

我们访问该控制器的地址:localhost:8082/site/getInfo,返回结果如下:



正确返回结果,测试成功。

之后我们就可以返回的UserInfo对象做其他的业务了。

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 使用 阅读详情

相关推荐

Springboot通过RestTemplate发送post请求并且发送文件数据

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

mikumiku5的博客 2105

restTemplate 发送post请求

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

dj1955的博客 5万+

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 191

精讲RestTemplate第4篇-POST请求方法使用详解

本文是精讲RestTemplate第4篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换 精讲RestTemplate第3篇-GET请求使用方法详解 如果您阅读完本文章,觉得对您有帮助,请帮忙点个赞,您的支持是我不竭的创作动力 在上一节为大家介绍了RestTemplate的GET请求的两个方法:getForObject()和getForEntity()。其实POST请求方

字母哥博客 1万+

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 328

axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

内容提要ready打拍的问题用FIFO的思路去解决用Buffer的思路去解决问题提出:ready时序如何优化?在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是...

weixin_29763641的博客 3320

SpringBoot项目中使用RestTemplate发送GET、POST请求

SpringBoot项目发送GET、POST请求,可以使用RestTemplate来完成,简便好用。 一、初始化RestTemplate @Component public class MyConfig { @Autowired RestTemplateBuilder templateBuilder; @Bean public RestTemplate restTemplate() { return templateBuilder.build();

weixin_44975741的博客 7860

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6097

Spring Boot发送GET/POST请求——RestTemplate的基本使用

RestTemplate的基本使用——发送GET/POST请求1. RestTemplateConfig配置类2. RestTemplateTest测试类3. 发送GET请求4. 发送POST请求5. POST发送文件 一般我们的Spring Boot工程都是被请求的一方,但某些情况下我们也需要调用别人的接口以实现逻辑,传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐,而Spring提供了一种简单便捷的模板类来进行操作,这就是Res

weixin_50637551的博客 1万+

Vivado SDK中LWIP库版本冲突与RTL8211FDI兼容性实战解析

本文深入解析Vivado 2019.1 SDK中LWIP 1.0库与RTL8211FDI千兆PHY芯片的版本冲突问题,并提供实战解决方案。通过手动移植高版本LWIP库、整合第三方驱动及优化BSP配置,有效解决了以太网通信兼容性问题,确保千兆性能稳定运行。

ios99的博客 272

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2556

SpringBoot ——— 使用RestTemplate发送带token的GET和POST请求

最近要在项目中调用别人提供的接口服务,网上大概搜了一下,发现除了传统的httpclient之外,Spring也为我们提供了一个非常方便的HTTP客户端,允许我们调用各种rest服务,包括GET,POST,PUT,DELETE等等。折腾了一下发现还挺好用的,下面贴出RestTemplate发送GET和POST的示例代码。 配置类: package com.test.config; import...

Die Another Day! 2万+

013:无人机航线规划的概念

航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。

qq_31762031的博客 2443

springboot中使用RestTemplate发送post请求

springboot中使用RestTemplate发送post请求

wodebokecsdn的博客 1702

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1490

jre9下载 jdk9

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

使用SpringBoot的RestTemplate发送post请求时参数带不上

项目中遇到一个向三方发起请求的数据,不过量不大,就几个方法而已,所以为了方便,我直接用了RestTemplate。 1、配置 @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bean

二祥的工作历程 2318

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

fymsnow的专栏 1441

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring boot使用RestTemplate发送Post请求

请求 Map<String, Object> param = new HashMap<>(); Map result = restTemplate.exchange( path, HttpMethod.POST, new HttpEntity<>(param, null), new Parameteriz.

宇晨的博客 420

Springboot使用RestTemplate发送Post请求postForEntity (application/json)的坑

当使用RestTemplate进行http请求时,的确很方便,但是当需要进行post请求时遇到了坑 1POST传递参数 :采用 LinkedMultiValueMap ,不能使用HashMap String url = 'http://posturl'; MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>(); map.add("shopid",".

anita9999的博客 1万+

SpringBoot RestTemplate 发送POST请求

SpringBoot RestTemplate 发送POST请求,封装好的,复制粘贴直接用

cszzl123的博客 2338

springboot使用Map接收请求参数 @RequestBody 使用RestTemplate发送http get和post源码 接口中转相当于反向代理

模拟一个请求 Spring @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。 ...

chenhao0568的专栏 1万+

restTemplate.postForObject 发送POST请求

1、引用依赖文档: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven...

i168wintop的博客 1万+

http请求使用 RestTemplate 发送 post 请求传递参数

http使用 RestTemplate 发送 post 请求传递参数 代码参考如下 import com.wondersgroup.yilian.interface_monitor_portallogin.entity.ResponseEntity; import com.alibaba.fastjson.JSONObject; import com.wondersgroup.yilian.int...

zhulaosan的博客 3113

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万+
上一篇: Linux目录结构说明
下一篇: Maven打包SpringBoot应用
占位符号
博客等级 码龄10年 75粉丝 53原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值