Spring RestTemplate的使用(解决put,delete方法无返回值问题)

--------------------- 
作者:汐日南莘 
来源:CSDN 
原文:https://blog.csdn.net/u010180738/article/details/61439630 
版权声明:本文为博主原创文章,转载请附上博文链接!

Spring提供了RestTemplate,可以利用RestTemplate调用REST资源。 
同时也可以用作服务端到服务端发送请求。 
在Java后台开发中,也可以使用RestTemplate来测试接口。 
RestTemplate支持get,put,delete,post操作。

package com.test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.nio.charset.Charset;

/**
 * Created by XFL.
 * time on 2017/3/8 23:37
 * description:测试工具类
 */
public class RestTester {
    private final String url;

private final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();

public void set(String key, String value) {
        params.add(key, value);
    }

/**
     * 构造方法,请求url.
     *
     * @param url 请求地址
     */
    public RestTester(String url) {
        super();
        this.url = url;
    }

/**
     * 发送get请求.
     *
     * @return 返回请求结果
     */
    public <T> T get(Class<T> cls) {
        String fullUrl = UriComponentsBuilder.fromHttpUrl(url).queryParams(params).build().toUriString();
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<T> resultEntity =  restTemplate.getForEntity(fullUrl, cls);
        return resultEntity.getBody();
    }

/**
     * 发送post请求.
     *
     * @return 返回请求结果
     */
    public <T> T post(Class<T> cls) {
        String fullUrl = UriComponentsBuilder.fromHttpUrl(url).build().toUriString();
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<T> resultEntity = restTemplate.postForEntity(fullUrl, params, cls);
        return resultEntity.getBody();
    }

/**
     * 发送/获取 服务端数据(主要用于解决发送put,delete方法无返回值问题).
     *
     * @param url      绝对地址
     * @param method   请求方式
     * @param bodyType 返回类型
     * @param <T>      返回类型
     * @return 返回结果(响应体)
     */
    public <T> T exchange(String url, HttpMethod method, Class<T> bodyType) {
        // 请求头
        HttpHeaders headers = new HttpHeaders();
        MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");
        MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8"));
        // 请求体
        headers.setContentType(mediaType);
        //提供json转化功能
        ObjectMapper mapper = new ObjectMapper();
        String str = null;
        try {
            if (!params.isEmpty()) {
                str = mapper.writeValueAsString(params);
            }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        // 发送请求
        HttpEntity<String> entity = new HttpEntity<>(str, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<T> resultEntity = restTemplate.exchange(url, method, entity, bodyType);
        return resultEntity.getBody();
    }
}

测试get方式

package com.test;

/**
 * Created by XFL
 * time on 2017/3/8 23:41
 * description:测试Get方法
 */
public class TestGet {
    public static void main(String[] args) {
        RestTester restTester = new RestTester("http://localhost:8080/Test");
        String result = restTester.get(String.class);
        System.out.println(result);
    }

}

Spring RestTemplate的使用(解决put,delete方法无返回值问题)相关推荐

  1. Spring MVC 中的 controller层的方法的返回值类型

    Controller方法的返回值可以有以下几种: 1.返回ModelAndView 返回ModelAndView时最常见的一种返回结果.需要在方法结束的时候定义一个ModelAndView对象,并对M ...

  2. Python中Tkinter解决button的command无返回值问题

    Tkinter是什么 Tkinter是Python的标准GUI库.Python使用Tkinter可以快速地创建GUI应用程序.由于Tkinter属于Python标准库,就不需要使用pip安装,直接导入 ...

  3. controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

    Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题.本文以实现方式.实质.实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章 ...

  4. Spring MVC使用篇(八)—— 处理器(Handler)方法的返回值

    文章目录 1.演示项目环境搭建 1.1 演示项目工程结构 1.2 演示项目依赖的基础jar包 1.3 配置web.xml 1.4 配置Spring MVC核心配置文件 2.返回ModelAndView ...

  5. SpringMVC——处理器方法的返回值类型

    目录 1. 控制器controller方法的返回值 1.1 返回值类型:ModelAndView 1.2 返回值类型:String 1.3返回值类型:void 1.4 返回值类型:Object(可以是 ...

  6. Spring-AOP @AspectJ进阶之绑定连接点方法的返回值

    文章目录 概述 实例 概述 在后置增强中,可以通过returning绑定连接点方法的返回值 实例 代码已托管到Github-> https://github.com/yangshangwei/S ...

  7. iBaits中,关于insert返回值的问题(注意!!!不必写resultClass= java.lang.Integer,方法的返回值就是int)

    今天工作中使用iBaits写SQL,其中一个是insert语句 在sqlMap中我这么写了,<insert parameterClass="...." resultClass ...

  8. SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)

    文章目录: 1.控制器controller方法的返回值 1.1 返回值类型:ModelAndView 1.2 返回值类型:String(这里的String是视图) 1.2.1 控制器类 1.2.2 s ...

  9. java gettext返回值_012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)...

    EditText中的getText()方法的返回值为CharSequence,如果我们想要获得string类型数据的话,需要在后边加上.toString 另外,String类型转为int:Intege ...

  10. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)

    获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题) 参考文章: (1)获取可视区域高度赋值给div(解决document.body.client ...

最新文章

  1. linux跨主机复制文件
  2. 无法使用_解决kali linux 2020 安装完后发现无法使用 ifconfig
  3. 【Maven3教程】Maven多工程、多模块
  4. Python3 定向爬虫之“抓取糗事百科图片”
  5. helm快速部署一个nginx应用并更改service类型为NodePort、自定义Chart的发布
  6. 中国电子学会python等级考试一级
  7. 计算机软件基础第四版,《计算机软件技术基础》徐士良(第4版)课后习题答案详解|复习笔记...
  8. Java基础002 Java9开发环境搭建(Win10平台)
  9. 视频教程-R语言数据挖掘-模型评估篇-大数据
  10. 破解Access(*.mdb)目前所有版本的密码
  11. SourceOffsite安装配置
  12. 不要签名证书将网页打包封装成苹果APP,无需苹果企业签名,IPA证书签名,ios签名证书,免越狱安装
  13. 工程师结婚还要加班,都是鹿晗干的好事
  14. 无法启动正在运行的oracle,Oracle侦听器未运行,无法启动
  15. 信号与系统学习笔记(大纲)
  16. 计算机xp上网运行很慢,如何解决WinXP打开我的电脑很慢的问题?
  17. word-spacing无效
  18. 为什么子进程要继承处理器亲缘性?
  19. 快速搭建日志系统——ELK STACK
  20. 谷歌输入法 GBoard for Android 终于支持中文输入了

热门文章

  1. Togu Audio Line推出最新版本的TAL-BassLine-101插件 支持M1芯片
  2. 智能翻译软件—人人译视界 for Mac
  3. Agenda for Mac(多功能日历管理工具)中文版
  4. Mac上自带的语音功能怎么用?让你的mac读给你听
  5. 2020杭电多校6 1006A Very Easy Graph Problem血泪史
  6. js课程 2-6 js如何进行类型转换及js运算符有哪些
  7. python中的json模块
  8. 磁盘阵列(RAID) 级别
  9. 用Java编写的简单手绘程序--原创
  10. Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例...