Add Converters for JsonNode, JsonObject and JsonArray. (#1682)

Closes #1650.
This commit is contained in:
Michael Reiche
2023-02-27 18:12:53 -08:00
committed by GitHub
parent 72b569a805
commit 1efcc1b0c3
5 changed files with 146 additions and 13 deletions

View File

@@ -129,7 +129,7 @@ class CouchbaseTemplateKeyValueIntegrationTests extends JavaIntegrationTests {
assertEquals(1, foundUsers.size(), "should have found exactly 1 user");
assertEquals(user2, foundUsers.iterator().next());
} finally {
couchbaseTemplate.removeByQuery(User.class).withConsistency(QueryScanConsistency.REQUEST_PLUS).all();
//couchbaseTemplate.removeByQuery(User.class).withConsistency(QueryScanConsistency.REQUEST_PLUS).all();
}
}
@@ -1046,6 +1046,13 @@ class CouchbaseTemplateKeyValueIntegrationTests extends JavaIntegrationTests {
User user = new User(UUID.randomUUID().toString(), "firstname", "lastname");
User inserted = couchbaseTemplate.insertById(User.class).one(user);
assertEquals(user, inserted);
User found = couchbaseTemplate.findById(User.class).one(user.getId());
assertEquals(inserted, found);
System.err.println("inserted: "+inserted);
System.err.println("found: "+found);
System.err.println("found:jsonNode "+found.jsonNode.toPrettyString());
System.err.println("found:jsonObject "+found.jsonObject.toString());
System.err.println("found:jsonArray "+found.jsonArray.toString());
assertThrows(DuplicateKeyException.class, () -> couchbaseTemplate.insertById(User.class).one(user));
couchbaseTemplate.removeById(User.class).one(user.getId());
}

View File

@@ -17,8 +17,13 @@
package org.springframework.data.couchbase.domain;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import com.couchbase.client.java.json.JsonArray;
import com.couchbase.client.java.json.JsonObject;
import com.couchbase.client.java.json.JsonValue;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
@@ -29,6 +34,10 @@ import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.annotation.Version;
import org.springframework.data.couchbase.core.mapping.Document;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* User entity for tests
*
@@ -40,14 +49,34 @@ import org.springframework.data.couchbase.core.mapping.Document;
@TypeAlias(AbstractingTypeMapper.Type.ABSTRACTUSER)
public class User extends AbstractUser implements Serializable {
public JsonNode jsonNode;
public JsonObject jsonObject;
public JsonArray jsonArray;
@PersistenceConstructor
public User(final String id, final String firstname, final String lastname) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.subtype = AbstractingTypeMapper.Type.USER;
this.jsonNode = new ObjectNode(JsonNodeFactory.instance);
try {
jsonNode = (new ObjectNode(JsonNodeFactory.instance)).put("myNumber", uid());
} catch (Exception e) {
e.printStackTrace();
}
Map map = new HashMap();
map.put("myNumber", uid());
this.jsonObject = JsonObject.jo().put("yourNumber",Long.valueOf(uid()));
this.jsonArray = JsonArray.from(Long.valueOf(uid()), Long.valueOf(uid()));
}
@Transient int uid=1000;
long uid(){
return uid++;
}
@Version protected long version;
@Transient protected String transientInfo;
@CreatedBy protected String createdBy;

View File

@@ -110,7 +110,7 @@ class StringN1qlQueryCreatorTests {
Query query = creator.createQuery();
assertEquals(
"SELECT `_class`, META(`" + bucketName()
"SELECT `_class`, `jsonNode`, `jsonObject`, `jsonArray`, META(`" + bucketName()
+ "`).`cas` AS __cas, `createdBy`, `createdDate`, `lastModifiedBy`, `lastModifiedDate`, META(`"
+ bucketName() + "`).`id` AS __id, `firstname`, `lastname`, `subtype` FROM `" + bucketName()
+ "` where `_class` = \"abstractuser\" and firstname = $1 and lastname = $2",
@@ -131,7 +131,7 @@ class StringN1qlQueryCreatorTests {
Query query = creator.createQuery();
assertEquals(
"SELECT `_class`, META(`" + bucketName()
"SELECT `_class`, `jsonNode`, `jsonObject`, `jsonArray`, META(`" + bucketName()
+ "`).`cas` AS __cas, `createdBy`, `createdDate`, `lastModifiedBy`, `lastModifiedDate`, META(`"
+ bucketName() + "`).`id` AS __id, `firstname`, `lastname`, `subtype` FROM `" + bucketName()
+ "` where `_class` = \"abstractuser\" and (firstname = $first or lastname = $last)",
@@ -151,11 +151,9 @@ class StringN1qlQueryCreatorTests {
Query query = creator.createQuery();
assertEquals(
"SELECT `_class`, META(`myCollection`).`cas` AS __cas, `createdBy`, `createdDate`, "
+ "`lastModifiedBy`, `lastModifiedDate`, META(`myCollection`).`id` AS __id, `firstname`, "
+ "`lastname`, `subtype` FROM `myCollection`|`_class` = \"abstractuser\""
+ "|`myCollection`|`myScope`|`myCollection`",
assertEquals("SELECT `_class`, `jsonNode`, `jsonObject`, `jsonArray`, META(`myCollection`).`cas`"
+ " AS __cas, `createdBy`, `createdDate`, `lastModifiedBy`, `lastModifiedDate`, META(`myCollection`).`id`"
+ " AS __id, `firstname`, `lastname`, `subtype` FROM `myCollection`|`_class` = \"abstractuser\"|`myCollection`|`myScope`|`myCollection`",
query.toN1qlSelectString(converter, bucketName(), "myScope", "myCollection", User.class, null, false, null,
null));
}