2016-06-21 2 views
3

Ich möchte pojo Objekt als JSON-Dokument in Marklogic mit Java-API einfügen. Ich verwende this Beispiel als Referenz, die Pojo als XML-Dokument einfügen ist.Marklogic - Pojo als JSON-Dokument in Java API einfügen

Ich kann meine Pojo-Klasse nicht mit dem Handle für JSON registrieren.

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(); 
    } 
} 

Wenn ich in diesem Beispiel falsch bin lass mich den richtigen Weg kennen und mir helfen, dieses Problem lösen.

Danke fürs Lesen.

Antwort

3

Während Sie möglicherweise JAXB verwenden, um Ihre Pojo zu JSON zu serialisieren, bevorzugen viele Jackson und unsere JacksonDatabindHandle. Siehe eine example in JacksonDatabindTest und beachte, dass the City class is registered on lines 68-69.

Oder, wenn Sie keine Kontrolle darüber haben, wie Ihr JSON in der Datenbank aussieht, ist die einfachste Möglichkeit, pojos persistent zu machen, POJO Data Binding Interface.

+0

Danke Sam für die Antwort. Ich werde JacksonDataBindTest versuchen. Ich habe das Beispiel der POJO-Bindung mit Schnittstelle versucht. Es gibt ein Problem mit diesem Ansatz, wie legen wir das uri des Dokuments beim Speichern des Dokuments fest? – RCS

+0

Sam, ich habe versucht, JacksonDataBind Beispiel und in der Lage, die Pojo Marklogic-Datenbank einfügen. Brauchen Sie einen Vorschlag im Falle der Aktualisierung (fügen Sie eine Eigenschaft) ein vorhandenes Dokument.Es gibt zwei Möglichkeiten, die ich mir vorstellen kann, entweder ich werde das Pojo aktualisieren und schreibe es wieder in db oder ich werde teilweise Update wie JSON Patch Beispiel . Welcher Ansatz wird besser und leistungsfähiger sein, wenn man bedenkt, dass ich mit einer großen Anzahl von Daten arbeiten muss. – RCS

+0

Sie legen das URI nicht mit PojoRepository fest, es wird basierend auf dem Klassennamen und der eindeutigen ID (markiert mit der @Id-Anmerkung) für Sie festgelegt. –