You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Map返回Postman时空字符串值丢失问题排查

Spring Boot接口返回Map时丢失空字符串值条目

调试时确认Map<String, String>包含带空字符串值的条目,但通过GET接口返回给Postman时,这些空值条目未被返回,仅收到非空值条目。

接口代码

@GetMapping(value = Routes.URI_SUFFIX_DATA_ZIPCODES_BY_CITY_AND_ZIPCODE, produces = {MediaType.APPLICATION_JSON_VALUE})
@RegisterMetricCallReceived(appService = "getStreetsByCityAndZipCode", version = "v1", type = TYPE_REST)
public Map<String,String> getStreetsByCityAndZipCode(HttpServletRequest request,
                                                     @RequestParam(name = "city") String city,
                                                     @RequestParam(name = "zipcode") String zipcode) {

    GetStreetByCityAndZipcode query = new GetStreetByCityAndZipcode();
    query.setCity(city);
    query.setZipcode(zipcode);
    Map<String, String> result = service.getStreets("eligibility", query).orElse(null);
    return result;
}

调试时的Map内容

"PLACE DU PRIEURE" -> "01043406"
"ROUTE DE BIERNE" -> ""
"ROUTE DE GENNES SUR GLAIZE" -> "01043405"
"RUE COURTE" -> "01043399"
"RUE D ANJOU" -> "01043398"
"RUE DE GENNES" -> "04311435"
"RUE DE L EGLISE" -> "01043397"
"RUE DE LA CHENAIE" -> "04106244"
"RUE DE LA POSTE" -> "01043400"
"RUE DES GRANDS JARDINS" -> "01043401"
"RUE DES JARDINS" -> ""
"RUE DES SPORTS" -> "04415887"

Postman收到的内容

"PLACE DU PRIEURE" -> "01043406"
"ROUTE DE GENNES SUR GLAIZE" -> "01043405"
"RUE COURTE" -> "01043399"
"RUE D ANJOU" -> "01043398"
"RUE DE GENNES" -> "04311435"
"RUE DE L EGLISE" -> "01043397"
"RUE DE LA CHENAIE" -> "04106244"
"RUE DE LA POSTE" -> "01043400"
"RUE DES GRANDS JARDINS" -> "01043401"
"RUE DES SPORTS" -> "04415887"

解决方案

问题根源是Spring Boot默认使用的Jackson序列化框架可能配置了排除空值/空字符串的规则,导致带空字符串值的Map条目被过滤。可以通过以下方式解决:

1. 全局配置Jackson保留所有值

在application.properties中添加配置:

spring.jackson.default-property-inclusion=ALWAYS

如果使用application.yml则配置:

spring:
  jackson:
    default-property-inclusion: ALWAYS

该配置会让Jackson序列化所有属性,包括空字符串、null值等,不会过滤带空字符串的Map条目。

2. 局部配置接口方法

直接在返回Map的接口方法上添加@JsonInclude注解,指定序列化规则:

@JsonInclude(JsonInclude.Include.ALWAYS)
@GetMapping(...)
public Map<String,String> getStreetsByCityAndZipCode(...) {
    // 方法逻辑不变
}

这种方式仅对当前接口生效,不会影响全局配置。

3. 检查自定义Jackson配置

如果项目中有自定义的Jackson配置类(比如继承WebMvcConfigurer并重写configureMessageConverters方法),需检查是否设置了SerializationFeature.WRITE_NULL_MAP_VALUES或JsonInclude相关规则,调整为允许空字符串值的序列化。

内容的提问来源于stack exchange,提问作者Wijdane KHATTAT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:48:24