Spring RestTemplate 将空字符串作为 null 发送?

Spring RestTemplate sends empty string as null?

我正在共同开发一段代码,通过 POST 从外部微服务中使用 JSON 两种格式获取一些数据。问题是我发送了一个空字符串,但微服务返回给我一条错误消息,提示每当我发送一个空字符串时,我发送的字段都是空的。添加 space 字符可消除此问题。有没有可能序列化出了问题?

提前致谢。

这是我的休息模板:

final HttpEntity<?> httpRequestEntity = new HttpEntity<>(employeeRequest, copyAndAdjustHeaders(httpHeaders));
            final ResponseEntity<EmployeeResponseDto> exchange = restTemplate.exchange(employeeResourcePath, HttpMethod.POST, httpRequestEntity, EmployeeResponseDto.class);
            final EmployeeResponseDto body = exchange.getBody();

我的对象映射器配置:

    @Bean
    public ObjectMapper objectMapper() {
        final ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
        objectMapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
        objectMapper.enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES);
        return objectMapper;
    }

以及我如何在构造函数中初始化自动装配的 RestTemplate。

        this.restTemplate = restTemplateBuilder
                .setConnectTimeout(requestConnectionTimeoutMillis)
                .setReadTimeout(requestReadTimeoutMillis)
                .rootUri(employeeRootUri)
                .build();

禁用映射器上的 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

objectMapper.disable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

ACCEPT_EMPTY_STRING_AS_NULL_OBJECT: Feature that can be enabled to allow JSON empty String value ("") to be bound to POJOs as null.

解决它的方法是在执行发布的微服务中用 @NotNull@JsonInclude(JsonInclude.Include.NON_NULL) 注释字段。它仍然很奇怪,尽管它并不是每次都在不同的环境中复制。现在可以正常使用了。