【问题标题】:Spring boot @JsonProperty to map nested object through parent.child pathSpring boot @JsonProperty 通过 parent.child 路径映射嵌套对象
【发布时间】:2021-06-18 23:04:47
【问题描述】:

我通过 Http 调用将以下数据结构传入我的服务器

person {
  name: "xyz",
  age: 30,
  status: {
    cd: "M",
    desc: "Married"
  }
}

那我有下面的实体类

@Setter
@Getter
public class Person {
  private String name;

  private int age;

  @JsonProperty("status.cd")
  private String status_cd;

  @JsonProperty("status/desc")
  private String status_desc;
}

无论我尝试哪种方式,我都无法让 spring boot 匹配 json 属性文本(这两个值始终为空)...这是可行的吗?如果可以,如何?

我需要生成的最终 JSON 如下

{
  name: "XYZ",
  age: 30,
  status_cd: "M",     // <-- Child attached to parent (flattened)
  status_desc: "Married"  // <-- Child attached to parent (flattened)
}

所以基本上我需要将我的孩子信息附加到父母。

更新 通过使用自定义 JsonDeserializer,我能够获得与父级扁平化的属性之一,如下所示

public class nameDeserializer extends JsonDeserializer<String> {
  @Overrde
  public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
    PersonStatus st = p.valueAs(PersonStatus.class)
    return st.getStatusCd();
}

这仅适用于每个类 @JsonDeserialize(using = nameDeserializre.class) 的一个属性集......一旦我将两个反序列化器附加到两个属性,我开始收到有关 json 异常的错误。

谢谢

【问题讨论】:

    标签: java json spring-boot annotations json-annotation


    【解决方案1】:

    试试这样的

    public class Person {
      private String name;
    
      private int age;
    
     private Status status;
     
     //your getter setter
    }
    
    public class Status {
    
          private String cd;
    
          private String desc;
          
          // getter setter
          
    }
    

    【讨论】:

    • 感谢您的回答,但这会给我嵌套的 json。而我需要的是将我的json扁平化为一个父级。 请查看 m 更新我解释了我需要的最终 json 和一些更新。
    • 试试这个,这可能对你有帮助stackoverflow.com/questions/37010891/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2020-09-27
    • 2013-08-01
    • 2019-09-02
    • 2015-11-15
    相关资源
    最近更新 更多