java调用http接口通过RestTemplate调用

package com.ruoyi.common.utils.webservice;

import com.alibaba.fastjson.JSON;
import com.ruoyi.common.utils.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.lang.reflect.Field;
import java.util.List;

/***
 @ClassName RestTemplate
 @Author Mr.lyb
 @Date 2020-7-8 16:54  星期三
 ***/
public class RestTemplateUtils {
/***
 * @MethodName: buildParamMaps
 * @Description: 读取要传入的数据
 * @Param: [params]
 * @Return: org.springframework.util.MultiValueMap<java.lang.String,java.lang.String>
 * @Date: 2020-7-8 16:55
   @Author: Mr.lyb   help QQ 937091538@qq.com
**/
    public static MultiValueMap<String, String> buildParamMaps(SecurityPlatformParams params){
        Field[] fields = params.getClass().getDeclaredFields();
        if (ArrayUtils.isEmpty(fields)){
            return null;
        }
        MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>();
        try {
            for (Field field : fields){
                field.setAccessible(true);
                paramMap.add(field.getName(), StringUtils.defaultIfNull(field.get(params), ""));
            }
        }catch (IllegalAccessException e){
            e.printStackTrace();
            return null;
        }
        return paramMap;
    }
/**
 * @MethodName: post
 * @Description: 请求接口返回数据
 * @Param: [restTemplate, url, paramMap]
 * @Return: java.lang.String
 * @Date: 2020-7-8 16:57
   @Author: Mr.lyb
**/
    public static String post(RestTemplate restTemplate, String url, MultiValueMap paramMap) throws Exception{
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(paramMap, httpHeaders);
        String resultStr;
        try {
            resultStr = restTemplate.postForObject(url, httpEntity, String.class);
        } catch (RestClientException e) {
            throw e;
        }
        return resultStr;
    }


    public static List<T> Entity(RestTemplate restTemplate, String url, MultiValueMap paramMap, Class<?> clazz) throws Exception{
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(paramMap, httpHeaders);
        String resultStr;
        try {
            resultStr = restTemplate.postForObject(url, httpEntity, String.class);
        } catch (RestClientException e) {
            throw e;
        }

       return (List)JSON.parseArray(resultStr, clazz);

    }

}
//test
 public static void main(String[] args) throws Exception {
        String url="http://localhost:8085/examxx_war/sysDept/yyb";//访问的接口
       RestTemplate restTemplate = new RestTemplate();//模板
       MultiValueMap multiValueMap = null;//定义MultiValueMap对象
       SecurityPlatformParams sp = new SecurityPlatformParams();//这个是对象,里面存放实体类属性用来引用
       sp.setParentId("101");//放入要传入的值,
        MultiValueMap<String, String> stringStringMultiValueMap = RestTemplateUtils.buildParamMaps(sp);//解析
        String post = RestTemplateUtils.post(restTemplate, url, stringStringMultiValueMap);//调用post

        List<SysDept> entity = (List)RestTemplateUtils.Entity(restTemplate, url, stringStringMultiValueMap, SysDept.class);//强转成list对象

       for (SysDept s :entity){
           System.out.println(s.getDeptName());
       }
        System.out.println(entity);

    }

1,返回 json格式

2,返回List集合对象

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 调用第三方接口通常会使用工具类 RestTemplateRestTemplate 是 Spring 框架提供的一个用于进行 HTTP 请求的工具类。它封装了 HTTP 请求的细节,提供了简单的 API 来发送 GET、POST、PUT 和 DELETE 请求,并能够方便地处理返回的响应结果。 使用 RestTemplate 需要先导入相关的依赖包,然后在代码中创建 RestTemplate 的实例。可以通过 RestTemplate 的各种方法来构建不同类型的 HTTP 请求,比如 getForObject、postForObject 等。在方法的参数中需要指定目标接口的 URL 地址,以及可能需要传递的请求参数。 在调用三方接口时,有时需要进行身份验证,可以在请求头中添加认证信息。RestTemplate 的方法中可以通过 HttpHeaders 对象来设置请求头的相关信息。另外,还可以设置请求体的内容格式,比如 JSON、XML 等。 调用接口后,可以通过 RestTemplate 的方法获取响应结果。比如,getForObject 和 postForObject 方法会返回代表响应结果的对象(可以是字符串、对象等)。另外,还可以通过 getForEntity 和 postForEntity 方法获取完整的响应对象,包括响应头、响应体等信息。 在使用 RestTemplate 调用接口时需要注意异常处理。如果调用接口出现异常,可以通过捕获 RestTemplateException 异常来处理。另外,还可以通过设置错误处理器来处理不同类型的错误响应。 总之,RestTemplate 是一个非常实用的工具类,可以方便地进行 Java 对第三方接口调用。通过它,我们可以发送 HTTP 请求,处理响应结果,并且简化了请求的编写和异常处理的过程。使用 RestTemplate 可以提高开发效率,并且可以与不同的第三方接口进行灵活的集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值