簡體   English   中英

Spring WebClient 過濾 Null 來自 Json 請求

[英]Spring WebClient filter Null from Json Request

我正在使用 Spring WebClient Api 進行 rest Z8A5DA52ED126447D35AZE70C05A 調用。

我有一個實體對象—— JobInfo作為我的 POST 請求負載。

下面的 Rest API 失敗,因為 JobInfo 的某些屬性是null

private BatchInfo createBulkUploadJob(JobInfo jobInfo) {
        return webClient.post()
                .uri(URL.concat("/services/data/v47.0/jobs/ingest/"))
                .contentType(MediaType.APPLICATION_JSON)
                .header("Authorization", "OAuth " + TOKEN)
                .bodyValue(jobInfo)
                .retrieve()
                .bodyToMono(BatchInfo.class)
                .block();
    }

我需要過濾掉 Null 屬性,使其無法通過 rest 調用發送。

我知道這可以通過在 JobInfo class 上包含以下注釋來輕松實現。

@JsonInclude(JsonInclude.Include.NON_NULL) 

但是JobInfo來自第三方 Jar,所以我無法觸摸這個 class。

有沒有辦法可以在 webClient 中配置它以過濾掉它或任何其他選項?

試試這個:

private BatchInfo createBulkUploadJob(JobInfo jobInfo) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        ExchangeStrategies strategies = ExchangeStrategies
                .builder()
                .codecs(clientDefaultCodecsConfigurer -> {
                    clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON));
                    clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON));

                }).build();

        WebClient webClient = WebClient.builder().exchangeStrategies(strategies).build();
        return webClient.post()
                .uri(URL.concat("/services/data/v47.0/jobs/ingest/"))
                .contentType(MediaType.APPLICATION_JSON)
                .header("Authorization", "OAuth " + TOKEN)
                .bodyValue(jobInfo)
                .retrieve()
                .bodyToMono(BatchInfo.class)
                .block();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM