首页 > 其他分享 >springboot 使用RestTemplate调用get api,传入参数

springboot 使用RestTemplate调用get api,传入参数

时间:2023-08-30 13:44:05浏览次数:52  
标签:sb springboot get url RestTemplate restTemplate new import

get api:

    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    @GetMapping(value = "/checkGetApi")
    @ApiOperation(value = "check get api method")
    public JSONObject checkGetApi(Integer userName) {
        JSONObject result = new JSONObject();
        try {
                String url= "http://xxx.com";
                Map<String, String> parameterMap = new HashMap<>();
                parameterMap.put("userName", userName);//设置 UserName
                JSONObject response= requestApi.getApi(url, parameterMap);
                return response;
            
        } catch (Exception e) {
            logger.info("Invoke eapi failed!");
            result.put("msg", "Invoke api failed!"); 
result.put("status", false);
       return result;
}
}

Servers:

 

@Service
public class RequestApi {
    private org.slf4j.Logger logger = LoggerFactory.getLogger(RequestApi.class);

    //    private RestTemplate restTemplate = new RestTemplate();//RestTemplate默认不处理HTTP响应码为400、500这类响应结果,直接抛异常
    //注入restTemplate bean
    @Resource(name = "myRestTemplate")
    private RestTemplate restTemplate;

    public JSONObject getApi(String url, Map<String, String> parameters) {
        try {
            logger.info("Start to get coverage api,url is {} , Parameters is {}", url, parameters.toString());
            //Set url, restTemplate请求的url后面要有占位符
//        url=url+"?";
            StringBuffer sb = new StringBuffer(url);
            sb = sb.append("?");
//        sb=sb.append("?Prameter1={pam1}&Name={Name}&Type={Type}");//get请求得参数,需要先占位 才能请求成功
            for (String key : parameters.keySet()) {
                sb.append(key + "={" + key + "}&");
            }
            sb = new StringBuffer(sb.substring(0, sb.lastIndexOf("&"))); //去掉最后的&符号
            String response = restTemplate.getForObject(sb.toString(),//获取资源的地址,get请求
                    String.class,//返回类型设为String
                    parameters
            );
            JSONObject body = JSONObject.parseObject(response);//获取respons
            Integer code = body.getInteger("code");
            String msg = body.getString("msg");
            logger.info("Invoke api failed,response code is {},msg is {}", code, msg);
            return body;
        } catch (Exception e) {
            logger.error("Invoke  apifailed!exception is {}",e);
            return null;
        }

    }
}

如何设置自动化的restTempalet:

package com.control.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

//RestTemplate默认不处理HTTP响应码为400、500这类响应结果,直接抛异常,但是,该请求的响应结果内容却是我需要用到的,
// 所以解决办法是:需要重写ResponseErrorHandler ,,对响应的错误信息不进行处理
@Configuration
public class FacePlusThrowErrorHandler implements ResponseErrorHandler {

    //写ResponseErrorHandler
    @Override
    public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
        return false;
    }

    //写ResponseErrorHandler
    @Override
    public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {

    }

    //设置自定义restTemplate
    /**
     * 常用远程调用RestTemplate
     * @return restTemplate
     **/
    @Bean
    public RestTemplate myRestTemplate() {
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setConnectTimeout(300000);
        requestFactory.setReadTimeout(300000);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
        restTemplate.setErrorHandler(new FacePlusThrowErrorHandler());
        return restTemplate;
    }

//    @Bean("restTemplate")
//    public RestTemplate restTemplate(){
//        RestTemplate restTemplate = new RestTemplate();
//        restTemplate.setErrorHandler(new AcceptResponseErrorHandler());
//        return restTemplate ;

}

 

标签:sb,springboot,get,url,RestTemplate,restTemplate,new,import
From: https://www.cnblogs.com/pingguomang/p/17667000.html

相关文章

  • springboot整合redis,连接两个redis
    在SpringBoot中,可以使用RedisTemplate进行Redis的连接和操作。要连接多个Redis实例,你可以创建多个RedisTemplate实例,并通过配置不同的连接工厂来连接到不同的Redis实例。首先,在application.properties(或application.yml)配置文件中添加Redis连接信息:#第一个Redis......
  • Springboot 如何使用事务来操作一些业务
    事务的介绍事务具有4个特性:原子性、一致性、隔离性、持久性。通常称为ACID特性。原子性(Atomicity): 一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么都做,要么都不做。一致性(Consistency):事务必须使数据库从一个一致性状态变成另一个一致性状态隔离性(Isolation):一个事......
  • getline的几种用法
    istream库下istream&getline(char*s,streamsizen);istream&getline(char*s,streamsizen,chardelim);从istream输入流中读取字符传入字符串s,个数为n string库下istream&getline(istream&is,string&str,chardelim);istream&getline(istre......
  • JavaBean的get、set方法引发的讨论
    一哥们发的一个被大家广泛认为蛋疼的帖子,如下: //设置成私有变量,有什么鸟用?难道是为了整个团队配合的时候告诉那些人这个变量不可以动吗?那是不是一个开发一个项目的时候这些修饰符是毫无意义的?privateStringcode;publicvoidsetCode(Stringcode){......
  • dget获取docker镜像,不用安装docker
    https://gitee.com/extrame/dget/tree/master#/extrame/dget/blob/master/bin/windows_amd64/dget.exe  使用方法注意,本程序为命令行程序,需要使用命令行[cmd/powershell/bash等]打开dgetinfluxdb:1.8.3 总之,就是dget后面跟docker镜像名,然后就会自动下载到当前目录......
  • 基于SpringBoot的装饰工程管理系统
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个装饰工程管理系统项目立......
  • 大华智慧园区综合管理平台 user_getUserInfoByUserName.action 账号密码泄漏漏洞
    漏洞简介大华智慧园区综合管理平台user_getUserInfoByUserName.action中存在API接口,导致管理园账号密码泄漏漏洞复现fofa语句:"/WPMS/asset/lib/gridster/"或app="dahua-智慧园区综合管理平台"鹰图语句:web.body="/WPMS/asset/lib/gridster/"POC:/admin/user_getUserInfoBy......
  • SpringBoot内置Tomcat的参数值
    SpringBoot内置Tomcat,在默认设置中,Tomcat的最大线程数是200,最大连接数是10000。默认情况下,支持最大并发量为一万,也就是指支持的连接数。Tomcat有两种处理连接的模式是BIO,一个线程只处理一个Socket连接是NIO,一个线程处理多个Socket连接处理多个连接的单个线程通常不会引起太......
  • Springboot——后端的一些配置(大部分都用得到)
    <repositories><repository><id>nexus-aliyun</id><name>nexus-aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><rele......
  • vue--day74--四个map方法的使用mapState ,mapGetters,mapMutations,mapActions
    1.Count.vue<template><div><h1>当前求和位{{sum}}</h1><h1>当前求和放大10倍后是{{bigSum}}</h1><h1>我在{{school}},学习{{subject}}</h1><selectv-model.number="n"><optionva......