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

  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/lyd447113735/p/14918555.html
Copyright © 2011-2022 走看看