zoukankan      html  css  js  c++  java
  • RestTemplate的使用(项目实例)

    项目目录

    Get请求测试类

    package com.example.demo.testRestTemplate;
    
    import com.example.demo.pojo.User;
    import org.junit.Test;
    import org.springframework.http.*;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    import java.util.Map;
    
    
    /**
     * @author lyd
     * @Description: Get测试
     * @date 10:21
     */
    public class TestGet {
    
    	RestTemplate restTemplate = new RestTemplate();
    
    	/**
    	 * 简单无参使用
    	 */
    	@Test
    	public void doGetTestOne() {
    
    		String url = "http://localhost:8080/doGetTestOne";
    
    		//方式一:GET 方式获取 JSON 串数据
    		String result = restTemplate.getForObject(url, User.class).toString();
    		System.out.println("返回结果1:" + result);
    
    		//方式二:GET 方式获取 JSON 数据映射后的 User 实体对象
    		User user = restTemplate.getForObject(url, User.class);
    		System.out.println("返回结果2:" + user);
    
    		//方式三:GET 方式获取包含 User 实体对象 的响应实体 ResponseEntity 对象,用 getBody() 获取
    		ResponseEntity responseEntity = restTemplate.getForEntity(url, User.class);
    		System.out.println("返回结果3:" + responseEntity.getBody());
    
    		// 方法四
    		//构建请求实体 HttpEntity 对象,用于配置 Header 信息和请求参数
    		MultiValueMap header = new LinkedMultiValueMap();//一键多值映射
    		header.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
    		HttpEntity<Object> requestEntity = new HttpEntity<>(header);
    		//执行请求获取包含 Product 实体对象 的响应实体 ResponseEntity 对象,用 getBody() 获取
    		ResponseEntity exchangeResult = restTemplate.exchange(url, HttpMethod.GET, requestEntity, User.class);
    		System.out.println("状态值:" + exchangeResult.getStatusCode());
    		System.out.println("返回结果4:" + exchangeResult.getBody());
    
    	}
    
    	/**
    	 * 复杂使用
    	 */
    	@Test
    	public void doGetTestTwo() {
    
    		String url = "http://localhost:8080/doGetTestWayOne?age={age}";
    
    		//方式一:将参数的值存在可变长度参数里,按照顺序进行参数匹配
    		ResponseEntity<User> responseEntity = restTemplate.getForEntity(url, User.class, 27);
    		System.out.println("返回结果1:" + responseEntity);
    
    		//方式二:将请求参数以键值对形式存储到 Map 集合中,用于请求时URL上的拼接
    		Map<String, Object> uriVariables = new HashMap<>();
    		uriVariables.put("age", 101);
    		User user = restTemplate.getForObject(url, User.class, uriVariables);
    		System.out.println("返回结果2:" + user);
    	}
    
    
    }
    
    
    
    

    Get请求接口

    package com.example.demo.controller;
    
    import com.example.demo.pojo.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    
    /**
     * @author lyd
     * @Description: Get对应接收示例
     * @date 10:38
     */
    @RestController
    public class GetController {
    
    	@Autowired
    	User user;
    
    	@RequestMapping("doGetTestOne")
    	public Object doGetTestOne() {
    		user.setName("getOne");
    		user.setMotto("我命油我不油天");
    		user.setAge(12);
    		user.setGender("男");
    		return user;
    	}
    
    	@RequestMapping("doGetTestWayOne")
    	public Object doGetTestWayOne(Integer age) {
    		user.setName("getOne");
    		user.setMotto("我命油我不油天");
    		user.setAge(age);
    		user.setGender("男");
    		return user;
    	}
    
    
    }
    

    Post请求测试类

    package com.example.demo.testRestTemplate;
    
    import com.example.demo.pojo.User;
    import org.junit.Test;
    import org.springframework.http.*;
    import org.springframework.http.converter.StringHttpMessageConverter;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;
    
    import java.nio.charset.StandardCharsets;
    
    
    /**
     * @author lyd
     * @Description: Post请求测试类
     * @date 11:09
     */
    public class TestPost {
    
    
    	RestTemplate restTemplate = new RestTemplate();
    
    	@Test
    	public void doPostTestOne() {
    
    		String url = "http://localhost:8080/doPostTestOne";
    
    		// 设置请求的 Content-Type 为 application/x-www-form-urlencoded
    		MultiValueMap<String,String> header = new LinkedMultiValueMap<>();
    		header.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
    
    		/**
    		 * 方式一拼接: 将请求参数值以 K=V 方式用 & 拼接,发送请求使用
    		 */
    
    		// 设置实体类
    		User user = new User();
    		user.setName("meimei");
    		user.setMotto("娇滴滴");
    		user.setAge(11);
    		user.setGender("女");
    		String userStr = "name=" + user.getName() + "&Motto=" + user.getMotto() + "&age=" + user.getAge() + "&Gender=" + user.getGender();
    		HttpEntity<String> request = new HttpEntity<>(userStr, header);
    
    		// RestTemplate设定发送UTF-8编码数据
    		restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
    		ResponseEntity<User> exchangeResult = restTemplate.exchange(url, HttpMethod.POST, request, User.class);
    		System.out.println("返回结果1:"+exchangeResult);
    
    		/**
    		 * 方式二:将请求参数以键值对形式存储在 MultiValueMap 集合,发送请求时使用
    		 */
    		MultiValueMap<String,Object> map = new LinkedMultiValueMap();
    		map.add("name","titi");
    		map.add("age",13);
    		map.add("gender","女");
    		map.add("motto","猛男");
    		HttpEntity<MultiValueMap> request2 = new HttpEntity(map,header);
    		// RestTemplate设定发送UTF-8编码数据
    		restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
    		ResponseEntity<User> exchangeResult2 = restTemplate.exchange(url,HttpMethod.POST, request2, User.class);
    		System.out.println("返回结果2:"+exchangeResult2);
    
    
    	}
    
    
    }
    

    Post请求接口

    package com.example.demo.controller;
    
    import com.example.demo.pojo.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author lyd
     * @Description: Post对应返回
     * @date 11:21
     */
    @RestController
    public class PostController {
    
    
       @RequestMapping(value = "doPostTestOne",method = RequestMethod.POST)
       public Object doPostTestOne(User user) {
          return user;
       }
    
    
    }
    

    文件上传测试类

    package com.example.demo.testRestTemplate;
    
    import org.junit.Test;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;
    
    import java.io.File;
    import java.util.Collections;
    
    /**
     * @author lyd
     * @Description: 上传文件测试类
     * @date 14:17
     */
    public class TestFiles {
    
    	RestTemplate restTemplate = new RestTemplate();
    
    	@Test
    	public void testUploadFile() {
    		String url = "http://localhost:8080/testUploadFile";
    
    		MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    		String filePath = "D:\IdeaProjects\test-RestTemplate\src\main\resources\verifyImg\1.png";
    		FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
    		body.add("file", fileSystemResource);
    
    		MultiValueMap<String,Object> header = new LinkedMultiValueMap<>();
    		header.put(HttpHeaders.CONTENT_TYPE, Collections.singletonList(MediaType.MULTIPART_FORM_DATA_VALUE));
    
    		HttpEntity<MultiValueMap<String,Object>> requestEntity = new HttpEntity(body,header);
    		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, String.class);
    
    		System.out.println("upload: " + responseEntity);
    	}
    
    
    }
    

    文件上传请求接口

    package com.example.demo.controller;
    
    import com.example.demo.pojo.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartRequest;
    
    /**
     * @author lyd
     * @Description: 文件测试类访问接口
     * @date 14:18
     */
    @RestController
    public class FileController {
    
    	@RequestMapping(value = "testUploadFile",method = RequestMethod.POST)
    	public String testUploadFile(MultipartRequest request) {
    		// Spring MVC 使用 MultipartRequest 接受带文件的 HTTP 请求
    		MultipartFile file = request.getFile("file");
    		String originalFilename = file.getOriginalFilename();
    		return "upload success filename: " + originalFilename;
    	}
    
    
    }
    

    上面用到的实体类

    package com.example.demo.pojo;
    
    import lombok.Data;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    import org.springframework.stereotype.Component;
    
    /**
     * @author lyd
     * @Description: 用户实体类
     * @date 11:55
     */
    @Data
    @Component
    public class User {
    
    	private String name;
    
    	private Integer age;
    
    	private String gender;
    
    	private String motto;
    
    
    }
    

    项目源码

    https://github.com/Wranglery/test-RestTemplate

  • 相关阅读:
    JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
    Java内部类详解 2
    内部类详解(很详细)
    《JAVA与模式》之简单工厂模式
    《JAVA与模式》之适配器模式
    多态
    java Final关键字
    java实例初始化块
    tween.js
    three.js 之旅 (三)
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/14918555.html
Copyright © 2011-2022 走看看