RestTemplate调用API返回List<Entity>字段全空问题求助
Hey Sach, let's work through why your Entity fields are showing up as null—this is a super common pitfall with RestTemplate and JSON deserialization! Here are the most likely fixes to check off:
1. Mismatched JSON Keys and Entity Fields
If the API's JSON keys don't align with your Entity class field names (e.g., JSON uses user_id but your field is userId), Jackson can't map the values automatically. Fix this in one of two ways:
- Add
@JsonPropertyannotations to explicitly map fields to JSON keys:public class Entity { @JsonProperty("user_id") private String userId; // Don't forget getters/setters! public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } } - Or, if you're using Spring Boot, enable automatic snake-case to camel-case mapping in your
application.properties:spring.jackson.property-naming-strategy=SNAKE_CASE
2. Missing Default Constructor or Public Getters/Setters
Jackson requires a no-argument constructor to instantiate your Entity class, plus public getters and setters to populate fields. Double-check your class has these:
public class Entity { private String name; // Required no-arg constructor public Entity() {} // Public getters and setters public String getName() { return name; } public void setName(String name) { this.name = name; } }
If you use Lombok, adding the @Data annotation will auto-generate these for you.
3. API Response Isn't a Direct Array
Make sure the API returns a raw JSON array (like [{"id":1}, {"id":2}]), not an object that wraps the array. If the response looks like this:
{ "results": [{"id":1}, {"id":2}] }
You'll need a wrapper class to capture the nested list:
public class EntityWrapper { private List<Entity> results; // Getter and setter for results public List<Entity> getResults() { return results; } public void setResults(List<Entity> results) { this.results = results; } }
Then adjust your RestTemplate call to use the wrapper:
ResponseEntity<EntityWrapper> responseEntity = restTemplate.exchange( dataUrl, HttpMethod.GET, entity, new ParameterizedTypeReference<EntityWrapper>() {} ); List<Entity> entities = responseEntity.getBody().getResults();
4. Missing Jackson Dependencies
While Spring Boot includes these by default, pure Spring projects need to explicitly include Jackson's databind dependency:
<!-- Maven --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
Start by verifying the API's JSON structure and checking your Entity class's constructor/getters/setters—these are the most frequent culprits!
内容的提问来源于stack exchange,提问作者sam N

