Spring

Spring WebClient Post 메소드 본문

기록만이살길 2022. 11. 13. 17:39
반응형

Spring WebClient Post 메소드 본문 물어보다

1. 질문(문제점):

https://scrapyrt.readthedocs.io/en/stable/api.html#post 에 설명된 대로 본문 데이터와 함께 POST 요청을 보내려고 합니다 .

여기에 내가 시도한 것이 있지만 HTTP 코드 500이 제공됩니다.

String uri = "http://localhost:3000";

WebClient webClient = WebClient.builder()  
            .baseUrl(uri)
            .build();
LinkedMultiValueMap map = new LinkedMultiValueMap();

        String q = "\"url\": \"https://blog.trendmicro.com/trendlabs-security-intelligence\",\"meta\":{\"latestDate\" : \"18-05-2020\"}}";
        map.add("request", q);
        map.add("spider_name", "blog");

        BodyInserter<MultiValueMap<String, Object>, ClientHttpRequest> inserter2
         = BodyInserters.fromMultipartData(map);

        Mono<ItemsList> result = webClient.post()
                                          .uri(uriBuilder -> uriBuilder
                                                           .path("/crawl.json")
                                                           .build())
                                          .body(inserter2)
                                          .retrieve()
                                          .bodyToMono(ItemsList.class);

        ItemsList tempItems = result.block();

2. 해결방안:

나를 위해 다음 코드가 작동했습니다.

public String wcPost(){

    Map<String, String> bodyMap = new HashMap();
    bodyMap.put("key1","value1");
 

    WebClient client = WebClient.builder()
            .baseUrl("domainURL")
            .build();


    String responseSpec = client.post()
            .uri("URI")
            .headers(h -> h.setBearerAuth("token if any"))
            .body(BodyInserters.fromValue(bodyMap))
            .exchange()
            .flatMap(clientResponse -> {
                if (clientResponse.statusCode().is5xxServerError()) {
                    clientResponse.body((clientHttpResponse, context) -> {
                        return clientHttpResponse.getBody();
                    });
                    return clientResponse.bodyToMono(String.class);
                }
                else
                    return clientResponse.bodyToMono(String.class);
            })
            .block();

    return responseSpec;
}
62073018
반응형