Spring WebClient filter Null от Json Запрос - PullRequest
0 голосов
/ 25 апреля 2020

Я использую Spring WebClient Api для вызова остальных API.

У меня есть объект сущности - JobInfo , который действует как полезная нагрузка моего POST-запроса.

Приведенный ниже 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.

@JsonInclude(JsonInclude.Include.NON_NULL) 

Но JobInfo исходит от стороннего Jar, поэтому я не могу коснуться этого класса.

Есть ли способ настроить это в webClient, чтобы отфильтровать это или любой другой параметр?

1 Ответ

0 голосов
/ 25 апреля 2020

Попробуйте с этим:

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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...