/**
* get请求构建uri
* @param params
* @param url
* @param encode
* @return
*/
private URI getUri(Map params, String url, boolean encode) {
String urlParams = mapToUrlString(params, encode);
url += "?" + urlParams;
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl(url);
return uriComponentsBuilder.build(true).toUri();
}
/**
* get请求参数转换
*
* @param mapper
* @param encode 是否URLEncoder 编码
* @return
*/
private String mapToUrlString(Map<String, Object> mapper, boolean encode) {
String urlString = "";
TreeMap<String, Object> map = new TreeMap<>();
map.putAll(mapper);
for (Map.Entry<String, Object> entity : map.entrySet()) {
String value = "";
try {
value = encode ? URLEncoder.encode((String) entity.getValue(), "UTF-8") : (String) entity.getValue();
} catch (UnsupportedEncodingException e) {
}
urlString += entity.getKey() + "=" + value + "&";
}
return urlString.substring(0, urlString.length() - 1);
}
通用的RestTemplate定义
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import javax.validation.constraints.Size;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* @author yangwenxin
* @Date 2022/7/12
* @Description
*/
@Configuration
@Slf4j
public class RestTemplateConfiguration {
@Bean("customRestTemplate")
public RestTemplate customRestTemplate() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(30000);
factory.setReadTimeout(30000);
RestTemplate restTemplate = new RestTemplate(factory);
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if (httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(StandardCharsets.UTF_8);
break;
}
}
// text/plain
restTemplate.getMessageConverters().add(new CustomMappingJackson2HttpMessageConverter());
restTemplate.setErrorHandler(new ResponseErrorHandler(){
@Override
public boolean hasError(ClientHttpResponse response) {
// 返回false表示不管response的status是多少都返回没有错
// 这里可以自己定义那些status code你认为是可以抛Error
return false;
}
@Override
public void handleError(ClientHttpResponse response) {
}
});
return restTemplate;
}
public static class CustomMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public CustomMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML);
setSupportedMediaTypes(mediaTypes);
}
}
}