1)引入配置
@Configuration
public class RestTempleConfig {
@Bean(value="myRestTemplate")
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(Constants.HTTP.CONNECT_TIMEOUT); //链接超时
requestFactory.setReadTimeout(Constants.HTTP.READ_TIMEOUT); //读取超时
return new RestTemplate(requestFactory);
}
}
2)工具类实现
@Component
public class HttpRestUtil {
private static Logger logger = LoggerFactory.getLogger(HttpRestUtil.class);
@Autowired
@Qualifier("myRestTemplate")
private RestTemplate restTemplate;
private HttpRestUtil(){ //私有化构造方法
}
/**
* post请求封装
* @param url 请求地址
* @param params 参数对象
* @return
*/
public Object postHttp(final String url,final Object params){
logger.info("Http请求地址:{},请求方式:{}",url,"post");
logger.info("Http请求参数:{}",params.toString());
if(StringUtils.isEmpty(url)){ //未发现请求地址
return null;
}
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Inclusion.NON_EMPTY);
String requestJson = null;
try {
requestJson = objectMapper.writeValueAsString(params);
} catch (Exception e) {
logger.info("Http请求异常:{}",e.getMessage());
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> entity = new HttpEntity<String>(requestJson,headers);
ResponseEntity<String> response = restTemplate.exchange(url,HttpMethod.POST,entity,String.class,params);
Integer code = response.getStatusCode().value();
if (200 == code) { //请求成功
return WrappedResult.successWrapedResult(response.getBody());
}
return WrappedResult.failedWrappedResult("访问失败");
}
/**
* get请求封装
* @param url 请求地址
* UriComponents uriComponents = UriComponentsBuilder.newInstance()
* .scheme("http")
* .host("example.com")
* .path("/hotels/{hotel}/bookings/{booking}")
* .build()
* .expand("42", "21")
* .encode();
* @return
*/
@SuppressWarnings({ "unused" })
public Object getHttp(final UriComponents url){
logger.info("Http请求地址:{},请求方式:{}",url.toUri(),"get");
if(null == url){
return null;
}
URI uri = url.toUri();
ResponseEntity<String> response = restTemplate.getForEntity(uri, String.class);
Integer code = response.getStatusCode().value();
if (200 == code) { //请求成功
return WrappedResult.successWrapedResult(response.getBody());
}
return WrappedResult.failedWrappedResult("访问失败");
}
/**
* delete请求封装
* @param url 请求地址
* @param params 请求参数
* @return
*/
public Object deleteHttp(final String url,final Map<String, Object> params){
logger.info("Http请求地址:{},请求方式:{}",url,"delete");
logger.info("Http请求参数:{}",params.toString());
if(StringUtils.isEmpty(url)){ //未发现请求地址
return null;
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> entity = new HttpEntity<String>(null, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.DELETE, entity, String.class, params);
Integer code = response.getStatusCode().value();
if (200 == code) { //请求成功
return WrappedResult.successWrapedResult(response.getBody());
}
return WrappedResult.failedWrappedResult("访问失败");
}
/**
* put请求封装
* @param url 请求地址
* @param params 请求参数
* @return
*/
public Object putHttp(final String url,final Map<String, Object> params){
logger.info("Http请求地址:{},请求方式:{}",url,"put");
logger.info("Http请求参数:{}",params.toString());
if(StringUtils.isEmpty(url)){ //未发现请求地址
return null;
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> entity = new HttpEntity<String>(null, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.PUT, entity, String.class, params);
Integer code = response.getStatusCode().value();
if (200 == code) { //请求成功
return WrappedResult.successWrapedResult(response.getBody());
}
return WrappedResult.failedWrappedResult("访问失败");
}
}
3)测试类
@RestController
@RequestMapping("/api")
public class HttpController {
// private static Logger logger = LoggerFactory.getLogger(HttpController.class);
@Autowired
private HttpRestUtil httpRestUtil;
@RequestMapping(value = "/getTest")
public Object getTest() {
UriComponents uriComponents = UriComponentsBuilder.newInstance()
.scheme("http")
.host("localhost")
.port(8088)
.path("/api/get")
.queryParam("appId", "222222")
.queryParam("dbName", "1111111111111")
.build()
.encode();
return httpRestUtil.getHttp(uriComponents);
}
@GetMapping(value = "/get")
public String get(String appId,String dbName){
Map<String, Object> map = new HashMap<>();
map.put("appId", appId);
map.put("dbName", dbName);
return map.toString();
}
@PostMapping(value = "/postTest")
public Object postTest() {
String url = "http://localhost:8088/api/post";
Map<String, Object> map = new HashMap<>();
map.put("appId", "1231222");
map.put("dbName", "222222222222");
return httpRestUtil.postHttp(url,map);
}
@PostMapping(value = "/post")
public String post(@RequestBody Map<String, Object> map){
return map.toString();
}
}