简体   繁体   中英

spring boot jackson generate dynamic property name with hierarchical levels

How to apply dynamic property name with counter in it.?

I am building a spring boot rest api that returns the following response object. Response object is a structure with hierarchical levels. Instead of showing all the "levels" property name as default "levels", i want to dynamically put the level number to it as explained in the below sample json.

public class Root {
    private String id;
    private List<Level> levels;
    }


public class Level {
    private String name;
    private List<Level> levels;
    }

current json output:

{
  "id" :"testid",
  "levels" : [
         {
          "name" :"test1"
          "levels" : [
              {
                 "name": "test3"
                 "levels" : []
              }
}

Sample expected json:

{
  "id" :"testid",
  "level1" : [
         {
          "name" :"test1"
          "level2" : [
              {
                 "name": "test3"
                 "level3" : []
              }
}

i solved it as follows, by adding a field that contains current level and appending that to the field name.

public class Root {
    private String id;

    @JsonIgnore
    private List<Level> levels;

    @JsonIgnore
    private int level;

    @JsonAnyGetter
    public Map<String, List<Level>> any() {
        return Collections.singletonMap("level"+level, levels);
    }

    }


public class Level {
    private String name;

    private List<Level> levels;

    @JsonIgnore
    private int level;

    @JsonAnyGetter
    public Map<String, List<Level>> any() {
        return Collections.singletonMap("level"+level, levels);
    }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM