将 json 字段绑定到 POJO 中具有不同名称的字段的注解
Posted
技术标签:
【中文标题】将 json 字段绑定到 POJO 中具有不同名称的字段的注解【英文标题】:Annotation for binding a json field to a field in POJO with a different name 【发布时间】:2016-12-16 07:18:45 【问题描述】:Java 类(用作数据传输对象):
类 Resource 还有一个名为 id
的字段,它的 getter 和 setter 类型不同,因此会出现语法错误。
class A extends Resource
private int id;
public int getId() return id; // syntax error as getId() function already exists in Resource
public void setId(int id) this.id = id;
由于上面的类是DTO,所以会映射一个JSON响应(带字段id
),不能使用getId(),我想把字段改成_id_
,改getter和setter相应地,并用注释将其绑定到id
字段。
注意:我使用的是弹簧靴。我尝试使用 @JsonProperty 注释,但没有奏效。春天有没有注释可以做到这一点?
【问题讨论】:
@JsonProperty("id") 不起作用? 不,它不起作用。它仍然会寻找一个名为“id”的字段 当你说它不起作用时......是不是抛出了一些异常?你能提供一些关于它是如何不起作用的见解吗? 【参考方案1】:谷歌搜索并找到了这个问题:Jackson serialization: how to ignore superclass properties。根据您的问题对其进行了调整。
public class A extends B
private int id;
public A(int id)
super.setId("id" + id);
this.id = id;
@Override
@JsonProperty("_id_")
public String getId()
return super.getId();
@Override
@JsonProperty("_id_")
public void setId(String id)
super.setId(id);
@JsonProperty("id")
public int getIntId()
return id;
@JsonProperty("id")
public void setIntId(int id)
this.id = id;
public class B
private String id;
public String getId()
return id;
public void setId(String id)
this.id = id;
用这个测试它:
@RestController
public class TestController
@GetMapping("/test")
public A test()
return new A(1);
输出是:
"_id_": "id1",
"id": 1
【讨论】:
【参考方案2】:public A extends Resource
private int id;
@JsonProperty("_id")
public int getId()
return id;
@JsonProperty("id")
public void setId(int id)
this.id = id;
方法名应该不同,所以jackson将其解析为不同的字段,而不是一个字段。
【讨论】:
@JsonProperty 没有像我提到的那样工作。它应该与 Spring MVC 或 Spring Boot 一起使用吗? 另外,我不能有一个 getId() 函数,因为在超类中有一个函数 getId() 具有不同的返回类型 或者只是将两个不同的 getter/setter 对绑定到一个变量,正如我在之前评论中给出的链接中所评论的那样 他们使用了同样的东西。 @JsonProperty。这对我不起作用 那么你需要找到它为什么不起作用的答案,而不是你可以用什么来解决这类问题。以上是关于将 json 字段绑定到 POJO 中具有不同名称的字段的注解的主要内容,如果未能解决你的问题,请参考以下文章