Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring反应式网络客户端返回状态代码404_Java_Spring_Spring Boot_Webclient_Reactive - Fatal编程技术网

Java Spring反应式网络客户端返回状态代码404

Java Spring反应式网络客户端返回状态代码404,java,spring,spring-boot,webclient,reactive,Java,Spring,Spring Boot,Webclient,Reactive,当我试图使用Spring Responsive webclient对下游系统之一进行GET调用时,它会返回状态码404。下面是日志 2020-09-22:40:35216信息c.s.d.r.DanamasRoute[reactor-http-epoll-2]客户端响应:org.springframework.web.reactive.function.Client。DefaultClientResponse@7157ba76 2020-09-22:40:35217调试c.s.d.r.Danama

当我试图使用Spring Responsive webclient对下游系统之一进行GET调用时,它会返回状态码404。下面是日志

2020-09-22:40:35216信息c.s.d.r.DanamasRoute[reactor-http-epoll-2]客户端响应:org.springframework.web.reactive.function.Client。DefaultClientResponse@7157ba76 2020-09-22:40:35217调试c.s.d.r.DanamasRoute[reactor-http-epoll-2]响应: 现状:404 内容类型:text/html;字符集=utf-8 内容语言:英语 内容长度:1030 日期:2020年9月22日星期二15:40:35 GMT 2020-09-22 22:40:35275错误c.s.d.e.CustomExceptionHandler[http-nio-8999-exec-6]内部服务器错误:org.springframework.web.reactive.function.client.WebClientResponseException$NotFound:404未找到

但当我对下游系统执行cURL GET命令时,会得到带有适当JSON响应的状态码200。 curl-X GET“http://?id=1zV1fG8aT3pI8jV0kX1f”-H“accept:application/json” {“responseResult”:{“responseCode”:{“code”:“00”,“description”:“Loan tenor info found.”,“name”:“Success”},“result”:“03”,“gracePeriode”:2,“利息”:“1.0%”,“name”:“Smart Fren”,“罚金”:“0.1%”,“tenor”:“14”,“unit”:“DAY”},{“code”:“65”,“gracePeriode”:2,“利息”:“2.34235%”,“姓名”:“经销商Smartfren”,“罚金”:“0.1%”,“期限”:3,“unit”:“月”}}

这是我的网络客户端代码:

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();
    }
有人能告诉我如何解决这个问题吗