Java中restTemplate的使用

news2025/7/17 16:09:14

原文链接

代码地址

本文介绍restTemplate基础用法。

Java中get和post的用法请参考:https://mp.weixin.qq.com/s/mC0D1nuCqIori5bWtLorWQ

1 提供get/post接口

1.1 Controller

@RestController
@RequestMapping("/homepage")
public class MyController {

    @Autowired
    MyService myService;

    // 提供get接口
    @GetMapping("/provideGet")
    public Map<String, String> provideGet(){
        return myService.provideGet();
    }

    // 提供post接口
    @PostMapping("/providePost")
    public Map<String, Object> providePost(@RequestParam("number") int number, @RequestParam("name") String name) {
        return myService.providePost(number, name);
    }

    // 提供map参数的post接口
    @PostMapping("/providePostByMap")
    public Map<String, Object> providePostByMap(@RequestParam Map<String, Object> map) {
        return myService.providePostByMap(map);
    }

    // 调用get接口
    @GetMapping("/useGet")
    public Map<String, Object> useGet() {
        return myService.useGet();
    }
}

1.2 Service

@Service
@EnableScheduling
public class MyService {

    public Map<String, String> provideGet() {
        Map<String, String> res = new HashMap<>();
        res.put("number", "3");
        res.put("name", "张三get");
        System.out.println("provideGet res:" + res + "\n");
        return res;
    }

    public Map<String, Object> providePost(int number, String name) {
        Map<String, Object> res = new HashMap<>();
        res.put("number", number);
        res.put("name", name);

        return res;
    }

    public Map<String, Object> providePostByMap(Map<String, Object> map) {
        int number = map.get("number") == null ? 0 : Integer.parseInt((String) map.get("number"));
        String name = map.get("name") == null ? "" : (String) map.get("name");
        Map<String, Object> res = new HashMap<>();
        res.put("number", number);
        res.put("name", name);

        System.out.println("providePostByMap res:" + res + "\n");
        return res;
    }
}

2 调用get/post接口

使用restTemplate调用get/post接口。

  • getForObject():返回值是HTTP协议的响应体
  • getForEntity():返回的是ResponseEntityResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息

2.1 Controller

@RestController
@RequestMapping("/homepage")
public class MyController {    
	@Autowired
    MyService myService;

    // 调用get接口
    @GetMapping("/useGet")
    public Map<String, Object> useGet() {
        return myService.useGet();
    }

    // 调用get接口验证账号密码
    @GetMapping("/useGetByPsw")
    public Map<String, Object> useGetByPsw() {
        return myService.useGetByPsw();
    }

    // 调用post接口
    @PostMapping("/usePost")
    public Map<String, Object> usePost() {
        return myService.usePost();
    }
}

2.2 Service

@Service
@EnableScheduling
public class MyService {
    @Resource
    private RestTemplate restTemplate;

    String getURL = "http://localhost:8081/homepage/provideGet";
    String postURL = "http://localhost:8081/homepage/providePostByMap";

    public Map<String, Object> useGet() {
        // getForObject返回值是HTTP协议的响应体
        String strObject = restTemplate.getForObject(getURL, String.class);
        JSONObject jsonObject = JSONObject.parseObject(strObject);

        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装
        ResponseEntity<ResponseResult> responseData = restTemplate.getForEntity(getURL, ResponseResult.class);
        Map<String, Object> returnData = new HashMap<>();
        returnData.put("StatusCode:", responseData.getStatusCode());
        returnData.put("Body:", responseData.getBody());

        System.out.println("useGet jsonObject:" + jsonObject + "\n");
        System.out.println("useGet responseData:" + responseData + "\n");
        System.out.println("useGet returnData:" + returnData + "\n");
        return returnData;
    }

    public Map<String, Object> useGetByPsw() {

        RestTemplateBuilder builder = new RestTemplateBuilder();
        RestTemplate restTemplate = builder.basicAuthentication("username", "password").build();

        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装
        ResponseEntity<ResponseResult> responseData = restTemplate.getForEntity(getURL, ResponseResult.class);
        Map<String, Object> returnData = new HashMap<>();
        returnData.put("StatusCode:", responseData.getStatusCode());
        returnData.put("Body:", responseData.getBody());

        System.out.println("useGetByPsw returnData:" + responseData + "\n");
        System.out.println("useGetByPsw returnData:" + returnData + "\n");
        return returnData;
    }

    public Map<String, Object> usePost() {
        //RestTemplate在postForObject时,用MultiValueMap,不可使用HashMap。
        MultiValueMap<String, String> sendData = new LinkedMultiValueMap<>();
        sendData.add("number", "3");
        sendData.add("name", "张三post");

        // getForObject返回值是HTTP协议的响应体
        String strObject = restTemplate.postForObject(postURL, sendData, String.class);
        JSONObject jsonObject = JSONObject.parseObject(strObject);

        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装
        ResponseEntity<ResponseResult> responseData = restTemplate.postForEntity(postURL, sendData, ResponseResult.class);
        Map<String, Object> returnData = new HashMap<>();
        returnData.put("StatusCode:", responseData.getStatusCode());
        returnData.put("Body:", responseData.getBody());

        System.out.println("usePost jsonObject:" + jsonObject + "\n");
        System.out.println("usePost responseData:" + responseData + "\n");
        System.out.println("usePost returnData:" + returnData + "\n");
        return returnData;
    }
}

 
 

学习更多编程知识,请关注我的公众号:

代码的路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑如何清理重复文件,查找电脑重复文件的软件

在电脑上面&#xff0c;不论是我们可以保存的&#xff0c;还是自动缓存的&#xff0c;都会有大量的重复文件&#xff0c;可能我们自己并没有发现&#xff0c;占据着电脑大量的空间&#xff0c;长此以往下去&#xff0c;会让电脑变得卡顿&#xff0c;我们就需要来清理一下这些不…

低代码维格云甘特视图入门教程

功能简介 低代码维格云甘特图主要通过条状图来显示某些时间相关的活动(任务、阶段、项目等)随着时间进展的情况,以便管理者直观地查看活动进度,把控全局。又称为时间视图、横道图、条状图(Bar chart)。 低代码维格云甘特图适用场景 项目管理生产管理其他领域:建筑、IT软件…

嵌入式FreeRTOS学习八,xTaskCreate创建任务的细节以及恢复中断任务实现

一.创建任务函数xTaskCreate 任务也不是很复杂的东西&#xff0c;任务也就是一个函数xTaskCreate。简单得说&#xff0c;创建一个任务&#xff0c;你得提供它的执行函数&#xff0c;你得提供它的栈的大小&#xff0c;函数的执行空间&#xff0c;函数的优先级等重要的条件。因为…

IPWorks EDI Translator Delphi Edition

IPWorks EDI Translator Delphi Edition 一套轻量级可编程EDI解析和翻译组件。 IPWorks EDI转换器包括便于电子数据交换(EDI)解析、翻译和验证的软件组件。这些组件包括灵活的模式支持&#xff0c;使开发人员能够使用各种模式格式&#xff0c;从而更容易与现有EDI处理应用程序集…

Maven项目属性与版本管理

本次将介绍两个内容&#xff0c;分别是&#xff1a; 属性版本管理 1. 属性 1.1 问题分析 我们先来分析一下问题&#xff1a; 前面在父工程中的dependencyManagement标签中对项目中所使用的jar包版本进行了统一的管理&#xff0c;但是如果在标签中有如下的内容&#xff1a;…

React源码分析4-深度理解diff算法

上一章中 react 的 render 阶段&#xff0c;其中 begin 时会调用 reconcileChildren 函数&#xff0c; reconcileChildren 中做的事情就是 react 知名的 diff 过程&#xff0c;本章会对 diff 算法进行讲解。 diff 算法介绍 react 的每次更新&#xff0c;都会将新的 ReactElem…

[安卓逆向]IDA Pro的认识及使用

[安卓逆向]IDA Pro的认识及使用 软件介绍 IDA Pro全称是交互式反汇编器专业版&#xff0c;人们其简称为IDA&#xff0c;IDA pro 是业界最成熟、先进的反汇编工具之一&#xff0c;是目前最棒的一个静态反编译软件&#xff0c;为众多0day世界的成员和ShellCode安全分析人士不可…

指纹浏览器是什么?可以用来解决流量套利的什么问题?

套利是一个永远不会过期的形式&#xff0c;由于信息差永远存在&#xff0c;有信息差就有套利空间。流量套利是购买和转售流量的过程。套利专家通常通过购买廉价流量并以更好的价格出售来赚取收入。他们把流量导流到广告商的网站上&#xff0c;满足广告商希望客户访问自己的网站…

理解Linux权限(一)

理解Linux文件权限 Permission Groups(权限组) 根据权限组划分&#xff1a;每个文件和目录都有3种使用者(用户) ower(所有者) - 所有者的权限仅适用于文件和目录的所有者&#xff0c;不会影响其他用户的操作&#xff1b;group(所属组) - 所属组的权限仅适用于已分配的文件和…

Transwarp Inceptor介绍

Transwarp Inceptor是星环科技推出的用于数据仓库和交互式分析的大数据平台软件&#xff0c;它基于Hadoop和Spark技术平台打造&#xff0c;加上自主开发的创新功能组件&#xff0c;有效的解决了企业级大数据数据处理和分析的各种技术难题&#xff0c;帮助企业快速的构建和推广数…

进化吧,MySQL锁!无锁->偏向锁->轻量级锁->重量级锁(请自动脑补数码宝贝进化音)

写在前边 走到哪都有各种琐事&#xff0c;在MySQL中咱已经聊透了各种琐事 ->MySQL锁机制&&事务&#xff0c;今天来看看Java里边的锁升级过程&#xff0c;以及各种锁之间的比较&#xff0c;悲观乐观&#xff0c;粗化消除~ 四种锁的Markword 优先程度 偏向锁->轻量…

【FPGA】FPGA实现IIC协议读写EEPROM(三) ----- 汇总篇

IIC协议读写EEPROM一、功能分析/模块划分二、状态转移图1、EEPROM读写控制状态转移图2、IIC接口驱动状态转移图三、工程代码实现1、顶层模块2、EEPROM读写控制模块3、IIC接口驱动模块4、参数配置5、其他模块四、仿真测试五、上板验证写在前面 FPGA实现IIC协议读写EEPROM相关文章…

【附源码】计算机毕业设计JAVA教学辅助系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

【Qt】控件探幽——QWidget

注1&#xff1a;本系列文章使用的Qt版本为Qt 6.3.1 注2&#xff1a;本系列文章常规情况下不会直接贴出源码供复制&#xff0c;都以图片形式展示。所有代码&#xff0c;自己动手写一写&#xff0c;记忆更深刻。 本文目录探索QWidget1、ui文件最后会变成什么&#xff1f;2、如何改…

在 OpenHarmony 轻量设备开发应用

本文档旨在讲解新建 Helloworld 项目步骤、固件包烧录到 BES2600WM 开发板、实现 js 和 C 代码的通讯。该 Demo 重点体现的是 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09; 3.1 Beta 系统轻量设备 js 和 C 的交互能力&#xff0c; 效果如图 &#xf…

dpdk PMD

PMD是Poll Mode Driver的缩写&#xff0c;即基于用户态的轮询机制的驱动 在不考虑vfio的情况下&#xff0c;PMD的结构图如下 虽然PMD是在用户态实现设备驱动&#xff0c;但还是依赖于内核提供的策略。其中uio模块&#xff0c;是内核提供的用户态驱动框架&#xff0c;而igb_uio…

深度探讨react-hooks实现原理

react hooks 实现 Hooks 解决了什么问题 在 React 的设计哲学中&#xff0c;简单的来说可以用下面这条公式来表示&#xff1a; UI f(data)等号的左边时 UI 代表的最终画出来的界面&#xff1b;等号的右边是一个函数&#xff0c;也就是我们写的 React 相关的代码&#xff1b…

最新最全面的Spring详解(一)——Spring概述与IOC容器

前言 本文为 【Spring】Spring概述与IOC容器 相关知识&#xff0c;下边将对Spring概述&#xff0c;IOC容器&#xff08;包括&#xff1a;IOC概述、配置元数据、容器实例化与使用、Bean的概述、依赖注入 Dependency Injection、Bean 作用范围&#xff08;作用域&#xff09;、更…

计算机网络(二)

三、数据链路层 3.1 数据链路层概述 数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层在不可靠的物理介质上提供可靠的传输。 该层的作用包括&#xff1a;物理地址寻址…

安装Redis

一、Windows安装 1、下载安装包 2、下载完毕得到压缩包 3、解压到自己电脑上的环境目录 4、开启redis&#xff0c;双击运行服务 5、使用redis客户端来连接redis 注意&#xff1a;Window下使用确实简单,但是Redis推荐我们使用Linux去开发使用! 二、Linux安装 1、官网下载…