问题描述
当我尝试使用Spring响应式Webclient对我们的下游系统之一进行GET调用时,它会向我返回statusCode404。下面是日志
2020-09-22 22:40:35,216 INFO c.s.d.r.DanamasRoute [reactor-http-epoll-2]客户端响应:org.springframework.web.reactive.function.client.DefaultClientResponse@7157ba76 2020-09-22 22:40:35,217 DEBUG c.s.d.r.DanamasRoute [reactor-http-epoll-2]响应: 状态:404 内容类型:text / html; charset = utf-8 内容语言: 内容长度:1030 日期:2020年9月22日星期二15:40:35 GMT 2020-09-22 22:40:35,275错误csdeCustomExceptionHandler [http-nio-8999-exec-6]内部服务器错误:org.springframework.web.reactive.function.client.WebClientResponseException $ NotFound:404未找到
但是,当我对下游系统执行cURL GET命令时,使用适当的JSON响应获取statusCode 200。 curl -X GET“ http://?id = 1zV1fG8aT3pI8jV0kX1f” -H“接受:application / json” {“ responseResult”:{“ responseCode”:{“ code”:“ 00”,“ description”:“找到贷款期限信息。”,“ name”:“成功”},“ result”:[{“ code”: “ 03”,“ gracePeriode”:2,“ interest”:“ 1.0%”,“ name”:“ Smart Fren”,“ penalty”:“ 0.1%”,“ tenor”:14,“ unit”:“ DAY” },{“ code”:“ 65”,“ gracePeriode”:2,“ interest”:“ 2.34235%”,“ name”:“ Reseller Smartfren”,“ penalty”:“ 0.1%”,“ tenor”:3, “ unit”:“ MONTH”}]}}
这是我的网络客户端代码:
public WebClient getWebClient(String ip,String port) {
HttpClient httpClient = HttpClient.create()
.tcpConfiguration(client ->
client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,10000)
.doOnConnected(conn -> conn
.addHandlerLast(new ReadTimeoutHandler(2))
.addHandlerLast(new WriteTimeoutHandler(2))));
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient.wiretap(true));
ObjectMapper mapper = new ObjectMapper();
ExchangeStrategies strategies = ExchangeStrategies
.builder()
.codecs(clientDefaultCodecsConfigurer -> {
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(mapper,MediaType.APPLICATION_JSON));
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(mapper,MediaType.APPLICATION_JSON));
}).build();
webClient = WebClient.builder().exchangeStrategies(strategies);
return webClient.baseUrl(ip + ":" + port)
.clientConnector(connector)
.defaultHeader(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE)
.defaultHeader(HttpHeaders.ACCEPT,MediaType.APPLICATION_JSON_VALUE)
.filters(exchangeFilterFunctions -> {exchangeFilterFunctions.add(logRequest());
exchangeFilterFunctions.add(logResponse());
exchangeFilterFunctions.add(errorHandlingFilter());
}).build();
}
public ExchangeFilterFunction errorHandlingFilter() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
return Mono.just(clientResponse);
});
}
ExchangeFilterFunction logResponse() {
return ExchangeFilterFunction.ofResponseProcessor((clientResponse -> {
if (LOGGER.isDebugEnabled()) {
StringBuilder sb = new StringBuilder("Response: \n")
.append("Status: ")
.append(clientResponse.rawStatusCode());
clientResponse
.headers()
.asHttpHeaders()
.forEach((key,value1) -> value1.forEach(value -> sb
.append("\n")
.append(key)
.append(":")
.append(value)));
LOGGER.debug(sb.toString());
}
return Mono.just(clientResponse);
}));
}
ExchangeFilterFunction logRequest() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
if (LOGGER.isDebugEnabled()) {
StringBuilder sb = new StringBuilder("Request: \n");
//append clientRequest method and url
clientRequest
.headers()
.forEach((name,values) -> values.forEach(value -> LOGGER.info("{}={}",name,value)));
LOGGER.debug(sb.toString());
}
return Mono.just(clientRequest);
});
}
public TenorUnitInfoResponseBean getTenorUnitInfo(String sessionId) {
return getWebClient(danamasIP,danamasPort)
.get()
.uri(uriBuilder -> uriBuilder.path(tenorUnitInfoURI)
.queryParam("sessionKey",sessionId)
.build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(TenorUnitInfoResponseBean.class)
.blockFirst();
}
有人可以让我知道如何解决此问题吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)