Marklogic - вставить pojo как документ json в java api

Я хочу вставить объект pojo как документ json в marklogic, используя java api. Я использую этот пример в качестве ссылки для вставки pojo в виде XML-документа.

Я не могу зарегистрировать свой класс pojo с дескриптором JSON.

public class JSONDocument {
    public static void main(String[] args) throws JAXBException, IOException {
        run(Util.loadProperties());
    }
    @JsonRootName(value = "product")
    static public class Product {
        @JsonProperty
        private String name;
        @JsonProperty
        private String industry;
        @JsonProperty
        private String description;
        public Product() {
            super();
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getIndustry() {
            return industry;
        }
        public void setIndustry(String industry) {
            this.industry = industry;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    }

    public static void run(ExampleProperties props) throws JAXBException {

        runShortcut(props);

        System.out.println("Wrote, read, and deleted "+Product.class.getName()+" using JAXB");
    }
    public static void runShortcut(ExampleProperties props) throws JAXBException {
        // register the POJO classes like JAXB - JAXBHandle.newFactory(Product.class)

        DatabaseClientFactory.getHandleRegistry().register(
            // Need help here for - registering pojo for JSON

        );
        // create the client
        DatabaseClient client = DatabaseClientFactory.newClient(
                props.host, props.port, props.writerUser, props.writerPassword,
                props.authType);

        // create a manager for JSON documents
        JSONDocumentManager docMgr = client.newJSONDocumentManager();

        // create an instance of the POJO class
        Product product = new Product();
        product.setName("FashionForward");
        product.setIndustry("Retail");
        product.setDescription(
                "(Shortcut) Creates demand with high prices, hours from midnight to dawn, and frequent moves");

        // create an identifier for the document
        String docId = "/example/"+product.getName()+".json";

        // write the POJO as the document content
        docMgr.writeAs(docId, product);

        // ... at some other time ...

        // read the POJO from the document content
        product = docMgr.readAs(docId, Product.class);

        // log the persisted Json document
        System.out.println(docMgr.readAs(docId, String.class));


        // release the client
        client.release();
    }
}

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

Спасибо за прочтение.


person RCS    schedule 21.06.2016    source источник


Ответы (1)


Хотя вы могли бы использовать JAXB для сериализации вашего pojo в JSON, многие предпочитают Jackson и наш JacksonDatabindHandle. См. пример в JacksonDatabindTest и обратите внимание, что Класс City прописан в строках 68-69.

Или, если вам не нужен контроль над тем, как ваш JSON выглядит в базе данных, самый простой способ сохранить pojos — использовать Интерфейс привязки данных POJO.

person Sam Mefford    schedule 21.06.2016
comment
Спасибо, Сэм, за ответ. Я попробую JacksonDataBindTest. Я попробовал пример привязки POJO к интерфейсу. У этого подхода есть одна проблема: как установить uri документа при его сохранении? - person RCS; 21.06.2016
comment
Сэм, я попробовал пример JacksonDataBind и смог вставить pojo в базу данных marklogic. Нужно одно предложение в случае обновления (добавить свойство) существующего документа. Я могу придумать два способа: либо я обновлю pojo и снова запишу его в БД, либо сделаю частичное обновление, например, пример исправления JSON. . Какой подход будет лучше и эффективнее, учитывая, что у меня есть большое количество данных для работы. - person RCS; 22.06.2016
comment
Вы не устанавливаете uri с помощью PojoRepository, он устанавливается для вас на основе имени класса и уникального идентификатора (помеченного аннотацией @Id). - person Sam Mefford; 23.06.2016
comment
Я думаю, что лучший способ измерить производительность — это попробовать ее с вашими данными. Трудно сказать, учитывая то немногое, что я знаю о вашем заявлении. Просто помните, что производительность во время выполнения — не единственный фактор. - person Sam Mefford; 23.06.2016
comment
Я понял вашу точку зрения, Сэм, мы не можем судить о производительности, но мой вопрос был о том, чтобы продвигаться вперед с лучшим подходом, среди которых замена всего объекта pojo на josn/добавить патч к существующему json. - person RCS; 23.06.2016