Как получить простые данные JSON в реализации REST Джерси?

java json rest jersey-2.0

552 просмотра

4 ответа

Если у нас есть класс POJO, то мы можем сопоставить его с некоторым входящим JSON. Я изо всех сил пытаюсь найти способ, с помощью которого я могу просто иметь все значения json внутри.

Например

{
    "macro_tasks": [
        {
            "id": "cc5cee68-c1e5-4396-987b-c68559399186",
            "label": "consi-1",
            "name": "Consi 1",
            "project_id": "82d1e463-1bb1-42d3-9adc-9e0d5848d139",
            "creator_id": null,
            "created_at": null,
            "updated_at": null,
            "meta_data": {
                "key1": "value1",
                "key2": 321
          }
        }
    ]
}

Вот meta_dataтип JSON, который может продолжать изменять свои значения внутри. Поэтому я не могу сопоставить его с каким-то классом POJO.

public class MacroTask {

    private UUID id;
    private String label;
    private String name;

    private UUID projectId;

    private UUID creatorId;

    private String createdAt;

    private String updatedAt;

    private <some data type> meta_data;

//getter and setter

Есть ли способ получить простые данные JSON и использовать их в коде и выгружать в БД [мы используем PostgreSQL, который поддерживает jsonbтип.]

Автор: theGamblerRises Источник Размещён: 08.11.2019 11:11

Ответы (4)


1 плюс

Решение

Я решил это, используя общий тип JSON, тип Джексона JsonNode. Как я слышал, у него есть некоторые недостатки, но я попробую. Пока что это работает в соответствии с ожиданиями. Я сообщу, если столкнусь с какой-либо проблемой или найду лучшее решение.

Автор: theGamblerRises Размещён: 22.08.2016 02:40

0 плюса

Вы можете использовать карту; любить

private Map<String, Object> meta_data;
Автор: Bimurto Badhan Размещён: 20.08.2016 12:53

0 плюса

Я получил следующую ошибку

Can not deserialize instance of java.lang.String out of START_OBJECT

Я использовал этот код для преобразования строки JSON в HasMap.

Map map = mapper.readValue(jsonString, new TypeReference<HashMap<String,String>>(){});

Я заменил его на.

Map map = mapper.readValue(jsonString, new TypeReference<HashMap<String,Object>>(){});
Автор: Sheikh Abdul Wahid Размещён: 20.06.2018 05:59

-1 плюса

Почему бы не использовать meta_dataв качестве поля типа stringвместо array? Затем вы можете добавить обычный JSON в виде строки и использовать это значение в своем бэкэнде.

//add json as string value to this field    
private String meta_data;
Автор: MKorsch Размещён: 20.08.2016 10:37
Вопросы из категории :
32x32