Reference materials:
https://www.jianshu.com/p/f3d0b4be5524
POST request
@Test
public void test() {
String url = "http://192.168.1.16:8080/api/inner/coupon/getCouponTljs";
// 设置请求的 Content-Type 为 application/json
MultiValueMap<String, String> header = new LinkedMultiValueMap();
header.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
// 设置 Accept 向服务器表明客户端可处理的内容类型
header.put(HttpHeaders.ACCEPT, Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
// 直接将实体 Product 作为请求参数传入,底层利用 Jackson 框架序列化成 JSON 串发送请求
HttpEntity<CouponTljReq> request = new HttpEntity<>(new CouponTljReq("shopping", "saveMoney", 1, 10));
ResponseEntity<CouponTljResp[]> exchangeResult = restTemplate.exchange(url, HttpMethod.POST, request, CouponTljResp[].class);
CouponTljResp[] body = exchangeResult.getBody();
System.out.println("post_product2: " + exchangeResult);
}
POST request specifies the receiving entity
MultiValueMap<String, String> header = new LinkedMultiValueMap();
header.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
// 设置 Accept 向服务器表明客户端可处理的内容类型
header.put(HttpHeaders.ACCEPT, Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
// 直接将实体 Product 作为请求参数传入,底层利用 Jackson 框架序列化成 JSON 串发送请求
HttpEntity<SignOpenPacketReq> request = new HttpEntity<>(new SignOpenPacketReq(appName, String.valueOf(user.getUserId()), user.getChannel()));
ResponseEntity<BaseResult<SignInPacket>> exchange = restTemplate.exchange(url, HttpMethod.POST, request, new ParameterizedTypeReference<BaseResult<SignInPacket>>() {
});
BaseResult result = exchange.getBody();
Map<String,Object> params = new HashMap<>();
params.put("skuId",skuId);
params.put("userId",userId);
params.put("appName",appName);
Long result = restTemplate.postForObject(url, params,Long.class);
GET request
String url = goodsServerUrl + "/exchange/round/recreation";
RoundTljResp[] roundTljResps = restTemplate.getForObject(url, RoundTljResp[].class);
Initialize RestTemplate
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
@Configuration
public class RestTemplateConfiguration {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
// RestTemplate支持traceId传递
ClientHttpRequestInterceptor tracerInterceptor = new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
HttpHeaders headers = request.getHeaders();
String traceId = MDC.get(TraceMarkRequestListener.MDC_KEY_TRACE_ID);
if (StringUtils.isNotBlank(traceId)) {
headers.add("x-request-id", traceId);
}
return execution.execute(request, body);
}
};
restTemplate.getInterceptors().add(tracerInterceptor);
return restTemplate;
}
}
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.UUID;
@Slf4j
@Component
public class TraceMarkRequestListener implements ServletRequestListener {
public static final String MDC_KEY_TRACE_ID = "traceId";
@Override
public void requestInitialized(ServletRequestEvent sre) {
ServletRequest request = sre.getServletRequest();
if (request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String xRequestId = httpRequest.getHeader("x-request-id");
if (xRequestId == null) {
xRequestId = UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
MDC.put(MDC_KEY_TRACE_ID, xRequestId);
}
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
MDC.remove(MDC_KEY_TRACE_ID);
}
private String getRequestHeaderInfo(HttpServletRequest request) {
StringBuilder builder = new StringBuilder();
Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
builder.append("[").append(name).append(":").append(request.getHeader(name)).append("],");
}
return builder.toString();
}
}