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