Spring restTemplate.postForObject映射无法识别带连字符JSON字段如何解决
带连字符JSON字段与Java POJO映射解决方案
方案1:单个字段显式指定映射(推荐少量字段适配场景)
直接在需要匹配带连字符JSON键的POJO属性上添加@JsonProperty注解,手动指定对应的JSON键名即可,修改后的Session类示例如下:
@Getter @Setter @JsonIgnoreProperties(ignoreUnknown = true) public class Session { private int age; private long expire; @JsonProperty("name-with-dashes") private String nameWithDashes; }
该方案无需修改全局配置,灵活度高,适合仅个别字段需要适配的场景。
方案2:全局配置命名转换规则(推荐大量kebab-case字段场景)
如果接口返回的所有JSON字段均为短横线分隔的kebab-case格式,可全局配置Jackson的命名策略,自动完成kebab-case到Java驼峰命名的转换,无需逐个字段加注解:
Spring Boot项目配置
在application.properties中添加如下配置即可全局生效:
spring.jackson.property-naming-strategy=KEBAB_CASE
若使用YAML格式配置,对应写法为:
spring: jackson: property-naming-strategy: KEBAB_CASE
手动初始化RestTemplate场景
如果是自行创建RestTemplate实例,可手动为其绑定的ObjectMapper设置命名策略:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE); RestTemplate restTemplate = new RestTemplate( new MappingJackson2HttpMessageConverter(objectMapper) );
内容的提问来源于stack exchange,提问作者user15613889
相关产品推荐
相关产品推荐

