在Java Webclient中,如何在Mono序列化中当值为null时完全省略字段

问题描述 投票:0回答:1

我在 Java Spring Boot 框架上,尝试使用 Mono 序列化 Java 对象以供 WebClient 用于发送。 我想知道当找到该值时是否可以完全删除该字段

null
。 我似乎没有找到办法做到这一点。试图找到一个注释来看看这是否有效。

下面是一个例子。

我有一个 Java 类,其对象如下所示

public class RequestBody {
  private String name_first;
  private String name_last;
  private String email_address;
}

使用构建器模式来构建它。

RequestBody requestBody =
    RequestBody.builder()
        .name_first(input.getName().getFirst())
        .name_last(input.getName().getLast())
        .build();

使用 WebClient + Mono 向另一个 API 进行 RESTful POST

    return requestBodySpec
      .header("Content-Type", "application/json")
      .body(Mono.just(requestBody), RequestBodyClass)
      .retrieve()
      .bodyToMono(String.class)
      .block();

Mono 序列化后的 JSON 结果如下所示。

{
    "name_first": "Foo",
    "name_last": "Bar",
    "email_address": null
}

期望请求 JSON 如下所示。当值为 null 时,

email_address
会被完全删除。我们该怎么做?

{
    "name_first": "Foo",
    "name_last": "Bar"
}
java json spring-boot spring-webclient reactor-netty
1个回答
1
投票

感谢 AI,答案是:创建一个 Weblux 配置类:

@Configuration
@EnableWebFlux

public class WebFluxConfig implements WebFluxConfigurer {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return mapper;
    }

    @Bean
    public Encoder<Object> encoder(ObjectMapper objectMapper) {
        return new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.