Spring Boot中如何忽略父类AuthToken映射JSON到Java POJO类
嵌套JSON映射到忽略父节点的Java POJO
需求说明
需要将以下嵌套JSON映射到TokenAccessResponseDTO类,忽略外层的AuthToken父节点,仅提取其中的token字段:
原始JSON
{ "AuthToken" : { "id" : "1", "token" : "abcde1234xyz", "extendSession" : null } }
现有POJO类
public class TokenAccessResponseDTO { private String token; public String getToken() { return token; } public void setToken(String token) { this.token = token; } }
解决方案(以Jackson为例)
默认映射逻辑无法直接找到token字段(它处于AuthToken子节点下),可以通过以下两种方式实现需求:
方案1:修改POJO添加注解
给token字段添加@JsonProperty注解,指定其在JSON中的完整路径,让Jackson直接定位到目标字段:
import com.fasterxml.jackson.annotation.JsonProperty; public class TokenAccessResponseDTO { @JsonProperty("AuthToken.token") private String token; public String getToken() { return token; } public void setToken(String token) { this.token = token; } }
方案2:通过ObjectMapper手动解析节点
如果不想修改POJO结构,可以先解析JSON树,定位到AuthToken节点后再映射到DTO:
import com.fasterxml.jackson.databind.ObjectMapper; public class Demo { public static void main(String[] args) throws Exception { String json = "{\"AuthToken\":{\"id\":\"1\",\"token\":\"abcde1234xyz\",\"extendSession\":null}}"; ObjectMapper mapper = new ObjectMapper(); TokenAccessResponseDTO dto = mapper.readTree(json) .get("AuthToken") .traverse() .readValueAs(TokenAccessResponseDTO.class); System.out.println(dto.getToken()); // 输出abcde1234xyz } }
补充说明
如果使用Gson库,也可以通过自定义TypeAdapter或解析JSON树提取字段的方式实现相同效果;修改POJO添加注解的方式更简洁,适合固定结构的JSON场景。
内容的提问来源于stack exchange,提问作者Bhavesh Shah
相关产品推荐
相关产品推荐

