Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
396 views
in Technique[技术] by (71.8m points)

spring boot - Java HttpClient - second call always fails

I am using java.net.http.HttpClient in my Java Spring Boot app and I noticed this weird behaviour.

When my code call HTTP request to 3rd party API, next request to different 3rd party API returns always as bad request (400). When I execute this request first, it works just fine.

When I restart the app, first API call is always successful, but second one is always bad and so I have to call it again after some timeout and then it work.

So I was thinking, if there is any form of "cache" that remember previous settings or whatever from previous request, because second request to different API is always bad. When I inspected HttpRequest in debugger, it seems okay to me and there was nothing really different from the one that worked.

Here is my bean config

@Configuration
public class HttpClientBean {

    @Bean
    public HttpClient httpClient() {
        return HttpClient.newHttpClient();
    }
}

HttpRequest builder

    public static HttpRequest buildGetRequest(final String url) {
        return HttpRequest.newBuilder()
                .uri(URI.create(url))
                .GET()
                .build();
    }

    public static HttpRequest buildPostRequest(final String url, final String body) {
        return HttpRequest.newBuilder()
                .version(HttpClient.Version.HTTP_1_1)
                .uri(URI.create(url))
                .setHeader(CONTENT_TYPE, APPLICATION_JSON)
                .POST(HttpRequest.BodyPublishers.ofString(body))
                .build();
    }

and here is HttpService

@Service
public class HttpServiceImpl implements HttpService {

    private final HttpClient httpClient;

    @Autowired
    public HttpServiceImpl(final HttpClient httpClient) {
        this.httpClient = httpClient;
    }

    @Override
    public HttpResponse<String> sendGetRequestWithParams(final String url, final String params) throws Exception {
        final HttpRequest request = buildGetRequest(url, params);
        return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    }

    @Override
    public HttpResponse<String> sendGetRequestWithoutParams(final String url) throws Exception {
        final HttpRequest request = buildGetRequest(url);
        return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    }

    @Override
    public HttpResponse<String> sendPostRequestWithBody(final String url, final String body) throws Exception {
        final HttpRequest request = buildPostRequest(url, body);
        return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    }
}

Thank you for your advices.

question from:https://stackoverflow.com/questions/65943242/java-httpclient-second-call-always-fails

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...