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)
注释字段。它仍然很奇怪,尽管它并不是每次都在不同的环境中复制。现在可以正常使用了。
我正在共同开发一段代码,通过 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)
注释字段。它仍然很奇怪,尽管它并不是每次都在不同的环境中复制。现在可以正常使用了。