Spring Boot中RestTemplate返回实体类属性为null问题求助
问题解决:RestTemplate反序列化后对象属性为null的原因及修复
问题根源
核心问题是JSON字段名与Java类属性的映射不匹配:返回的JSON字段是首字母大写格式(如"Id"、"TenId"),而Spring默认使用的Jackson库,默认命名策略会将Java属性按小驼峰(如id、tenId)去匹配JSON字段,导致无法正确绑定值,最终属性全部为null。
修复方案
有两种常用方式解决这个映射问题:
方案1:给属性添加@JsonProperty注解(推荐,针对性强)
在Workspace类的每个属性上添加@JsonProperty注解,指定对应的JSON字段名:
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; public class Workspace { @JsonProperty("Id") private String Id; @JsonProperty("TenId") private String TenId; @JsonProperty("Name") private String Name; @JsonProperty("Description") private String Description; @JsonProperty("Tags") private List<String> Tags; // 保留原有的getter、setter、无参/有参构造方法 }
方案2:全局配置Jackson命名策略(适合统一处理首字母大写的JSON)
如果你的项目中大量接口返回的都是首字母大写的JSON,可以在Spring Boot中全局配置Jackson的命名策略:
- application.properties配置:
spring.jackson.property-naming-strategy=UPPER_CAMEL_CASE
- Java配置类方式:
import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE); return objectMapper; } }
关于Workspace[].class接收方式的确认
使用Workspace[].class作为exchange方法的响应类型是完全正确的,RestTemplate支持直接将JSON数组反序列化为Java数组,你后续通过Arrays.asList(employees1)转换为List的写法也没问题,只要解决了字段映射问题,这种方式就能正常获取属性值。
内容的提问来源于stack exchange,提问作者Pranav
相关产品推荐
相关产品推荐

