RestTemplate 非200请求 响应获取的方法
方法一:
响应是非200请求会抛异常,可以用try去捕获
try{
sinGnUpOne_Method(req,token,skuurl);
// 获取200响应
// {"id":6,"path":"/free/xxxx","reserve":0}
System.out.println("看下抛异常走不走");
}catch(Exception e) {
System.out.println(e.getCause());
// 获取非200的响应
// 400 : [{"error_code":"22222@您已存在订单"}]
System.out.println(e.getMessage()); ----拿到的是String类型
System.out.println("走catch");
方法二:
try{
sinGnUpOne_Method(req,token,skuurl);
// 获取200响应
// {"id":6,"path":"/free/xxxx","reserve":0}
System.out.println("看下抛异常走不走");
}catch(HttpClientErrorException e) {
String resBody = e.getResponseBodyAsString();
String code = e.getStatusCode().toString();
//{"error_code":"22222@您已存在订单"}
System.out.println(resBody);
//400 BAD_REQUEST
System.out.println(code);
}
方法三:
实现ResponseErrorHandler重写,非200也正常返回
实现自定义RestTemplateResponseErrorHandler
RestTemplateResponseErrorHandler
package com.Common.restTemplate;
import com.sun.jersey.api.NotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.ResponseErrorHandler;
import java.io.IOException;
@Component
public class RestTemplateResponseErrorHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse httpResponse)throws IOException {
return (httpResponse.getStatusCode().series() == HttpStatus.Series.CLIENT_ERROR
|| httpResponse.getStatusCode().series() == HttpStatus.Series.SERVER_ERROR);
}
@Override
public void handleError(ClientHttpResponse httpResponse)throws IOException {
if (httpResponse.getStatusCode().series() == HttpStatus.Series.SERVER_ERROR) {
throw new HttpClientErrorException(httpResponse.getStatusCode());
} else if (httpResponse.getStatusCode().series() == HttpStatus.Series.CLIENT_ERROR) {
if (httpResponse.getStatusCode() == HttpStatus.NOT_FOUND) {
throw new NotFoundException();
}
}
}
}
将ResponseErrorHandler实现注入到RestTemplate实例中
RequestConfig --配置文件
package com.config;
import com.Common.restTemplate.RestTemplateResponseErrorHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RequestConfig{
@Bean
public RestTemplate restTemplate(RestTemplateResponseErrorHandler restTemplateResponseErrorHandler) throws Exception {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(restTemplateResponseErrorHandler);
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
//读取超时时间设置
factory.setReadTimeout(5000);
//连接超时时间设置
factory.setConnectTimeout(15000);
return factory;
}
}
参考:
https://blog.csdn.net/y534560449/article/details/115658680?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2.pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2.pc_relevant_bbs_down_v2_default
方法三的文件放置
发送请求相关见 https://www.cnblogs.com/kaibindirver/p/15398815.html