用于将json字段绑定到POJO中具有不同名称的字段的注释

时间:2016-08-10 04:38:40

标签: json spring spring-boot

Java类(用作数据传输对象):

class 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注释但是没有用。在春天有这样的注释?

2 个答案:

答案 0 :(得分:2)

用Google搜索并找到了这个问题:Splice Machine。适应你的问题。

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
}

答案 1 :(得分:1)

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将其解析为不同的字段,而不是一个字段。