Сериализация вложенных Java объектов в json - PullRequest
0 голосов
/ 27 мая 2020

Есть объект java, который ссылается на другой объект, и этот объект ссылается на другой. Все эти три объекта могут быть сериализованы в json.

Все классы имеют соответствующую аннотацию Джексона:

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.ANY, setterVisibility = JsonAutoDetect.Visibility.NONE)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
class A {
    B b;
    @JsonProperty("components")
    public String getComponents() {
       /***/
    }
}

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
class B {
   @JsonProperty 
   String message;
   @JsonProperty
   Long id;
   @JsonIgnore
   C c;
}

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
Class C {
   @JsonProperty 
   String param1;
   @JsonProperty
   String param2;
}

В настоящее время метод getComponents в классе A выглядит так:

    public String getComponents() {
         JSONObject components = new JSONObject();
         components.put("b", b);
         components.put("c", c);
         return components.toString();
    }

Для components свойства I ожидайте увидеть в json следующее:

"components": { "b": {"message":"", id:1}, "c": {"param1":"", "param2":""}}

Но в настоящее время он возвращает ссылку на объекты

"components": { "b": "com.myproject.B@6by789ae", "c": "com.myproject.C@8io287ko"}

Учитывая, что каждый объект может быть превращен в json, почему не JSONObject.toString рекурсивно l oop по ним и не превращает каждое в свое json представление? Есть ли какой-нибудь механизм, который я использую?

1 Ответ

0 голосов
/ 27 мая 2020

Хорошо. Думаю, я нашел решение. Я превратил components из JSONObject в Map<String, Object>, и Джексон, кажется, обрабатывает все остальное:

public Map<String, Object> getComponents() {
     Map<String, Object> components = new HashMap<>();
     components.put("b", b);
     components.put("c", c);
     return components;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...