Как сериализовать объект JSON в пользовательском геттере? - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу получить этот JSON из класса User:

{
    "id" : "1234",
    "campaignId" : {
        "campaignId" : "whatever"
    }
}

Это класс:

class User {

    private String id;
    private String campaignId;

    public String getId() {
        return id;
    }

    public String getCampaignId() {
        return "{ \"campaignId\" : \""+ campaignId +"\" }";
    }

}

Но у меня неправильный JSON:

{
    "id" : "1234",
    "campaignId" : "{
        \"campaignId\" : \"whatever\"
    }"
}

Как видите, первый уровень campaignId - это строка вместо объекта, содержащего ключ campaignId.

Как мне достичь этого, не создавая еще одно POJO?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я хочу получить этот json из класса User: ...

"campaignId": { "campaignId": "что угодно"

...

приватный строковый идентификатор кампании;

Эти вещи просто не идут вместе.

Если ваше требование заключается в том, что идентификатор кампании должен быть вложенной структурой, например картой, тогда модель соответственно.

Другими словами: тип вашего "bean" должен быть чем-то другим, чем String. Например, карта. Или, может быть, какой-то самописанный класс, в котором один член является строкой.

Все остальное просто сбивает с толку ваших читателей. Ваш код должен сообщать о ваших намерениях. И поле, которое является строкой, не является картой.

Это все равно что сказать: «смотри сюда, мой милый кот», где на самом деле у тебя есть собака, но ты заставляешь его в костюм котенка выглядеть как кошка.

0 голосов
/ 09 ноября 2018

Я решил вернуть Map вместо String:

public Map<String, String> getCampaignId() {
    Map<String, String> c = new HashMap<>();
    c.put("campaignId", campaignId);
    return c;
}

Это работает, но если кто-нибудь знает, как это можно сделать, используя аннотации Джексона или другое более элегантное решение, я приму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...