java - Spring WebClient 从 Json 请求中过滤 Null

标签 java spring spring-boot spring-mvc

我正在使用 Spring WebClient Api 进行 REST API 调用。

我有一个实体对象 - JobInfo,它充当我的 POST 请求有效负载。

以下 Rest API 失败,因为 JobInfo 的某些属性为空。

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 属性,以免通过其余调用发送它。

我知道这可以通过在 JobInfo 类上包含以下注释来轻松实现。

@JsonInclude(JsonInclude.Include.NON_NULL) 

但是JobInfo来自第三方Jar,所以我无法触及这个类。

有没有办法可以在 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();
    }

关于java - Spring WebClient 从 Json 请求中过滤 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61424901/

相关文章:

java - 如何在 Spring MVC JavaEE 中重定向到另一个站点

java - Hibernate 相同查询多个别名和性能问题

java - 前端 (HTML) 未从 Microsoft Azure 中的 mysql 数据库获取 Spring Boot 应用程序中的数据

java - 如何将二进制/八位字节流 s3 内容保存/压缩为 zip

java - 使用 ehcache 部署 Spring Boot 应用程序时 Tomcat 不会关闭

java - 什么时候声明对象?

java - 检查日期范围是否触及时间范围

Java-如何扩展 InputStream 以从 JTextField 中读取?

java - 如何从rest webservice spring返回自定义响应

java - 比较存储为字符串的不同日期格式