软件编程
位置:首页>> 软件编程>> java编程>> 详解Java中restTemplate的使用

详解Java中restTemplate的使用

作者:代码的路  发布时间:2023-06-19 23:20:29 

标签:Java,restTemplate

本文介绍restTemplate基础用法。

Java中get和post的用法请参考:一文带你搞懂Java中Get和Post的使用

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;
   }
}

来源:https://mp.weixin.qq.com/s/0dEAl8yySdgSlbzeozQc8A

0
投稿

猜你喜欢

  • 本文实例为大家分享了java实现猜字母游戏的具体代码,供大家参考,具体内容如下案例需求:StepOne:系统随机生成一组随机的字符数组(不重
  • 在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#
  • 本地仓库主要是一种缓存,当你使用远程仓库中下载组件后,它下一次会优先从本地进行加载,一般位于USER_HOME/.m2目录下,我们自己也可以
  • 这篇文章主要介绍了springboot如何使用AOP做访问请求日志,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
  • 计数排序是非比较的排序算法,用辅助数组对数组中出现的数字计数,元素转下标,下标转元素计数排序优缺点优点:快缺点:数据范围很大,比较稀疏,会导
  • 本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下1.学生管理系统(控制台界面实现)//学生类,继承Seria
  • 这篇文章主要介绍了Java List集合排序实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
  • 多级缓存在实际开发项目,为了减少数据库的访问压力,都会将数据缓存到内存中比如:Redis(分布式缓存)、EHCHE(JVM内置缓存).例如在
  • 提示:这里咱们要说的常量池,常量池就是咱们面试中所说的常量池,谈谈你对常量池的认识?面试官一问咱们就懵逼了,你要记得你脑子中有一张图!!!
  • 概述背景函数式编程的理论基础是阿隆佐&middot;丘奇(Alonzo Church)于 1930 年代提出的 &lambd
  • 最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个
  • 1、配置 IDEA 的 Maven 环境单击菜单栏中的 File → Settings → Build, Ex
  • 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchr
  • Java中重载与重写的区别首先我们来讲讲:重载(Overloading)    (1) 方法重载是让类以统一的
  • Java栈之链式栈存储结构实现一、链栈采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈。二、栈的链式存储结构实现package com
  • Java 方法执行时的动态分派和静态分派是 Java 实现多态的本质背景Java 的动态分派和静态分派也是 Java 方法的执行原理。 Ja
  • 昨天有个刚学java的师弟发了个程序给我,说死活编译不过,老是报编码问题,自己试了一下,也出问题了...当我们编辑了一个Java源文件保存时
  • 在实际项目当中,我们经常会涉及到对时间的处理,例如登陆网站,我们会看到网站首页显示XXX,欢迎您!今天是XXXX年。。。。某些网站会记录下用
  • 一、BigInteger介绍如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用
  • 一.解析概念StringUtils概念StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提
手机版 软件编程 asp之家 www.aspxhome.com