mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#377 - Add back support for JsonWriteBeanVisitor
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package com.avaje.ebeaninternal.server.text.json;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.text.json.JsonContext;
|
||||
import com.avaje.ebean.text.json.JsonWriteBeanVisitor;
|
||||
import com.avaje.ebean.text.json.JsonWriteOptions;
|
||||
import com.avaje.ebean.text.json.JsonWriter;
|
||||
import com.avaje.tests.model.basic.Address;
|
||||
import com.avaje.tests.model.basic.Contact;
|
||||
import com.avaje.tests.model.basic.Country;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestJsonWriteVisitor extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
List<Customer> list = Ebean.find(Customer.class)
|
||||
.select("id, name, status")
|
||||
.fetch("billingAddress", "line1, city")
|
||||
.fetch("billingAddress.country", "*")
|
||||
.fetch("contacts", "firstName,email")
|
||||
.order().desc("id")
|
||||
.findList();
|
||||
|
||||
JsonContext json = Ebean.json();
|
||||
|
||||
JsonWriteOptions options = new JsonWriteOptions();
|
||||
options.setRootPathVisitor(new CustomerVisitor());
|
||||
options.setPathVisitor("billingAddress", new BillingVisitor());
|
||||
options.setPathVisitor("billingAddress.country", new CountryVisitor());
|
||||
options.setPathVisitor("contacts", new ContactVisitor());
|
||||
|
||||
String jsonContent = json.toJson(list, options);
|
||||
System.out.println(jsonContent);
|
||||
|
||||
assertThat(jsonContent).contains("customerExtra");
|
||||
assertThat(jsonContent).contains("contactExtra");
|
||||
assertThat(jsonContent).contains("billingExtra");
|
||||
assertThat(jsonContent).contains("countryExtra");
|
||||
}
|
||||
|
||||
class CustomerVisitor implements JsonWriteBeanVisitor<Customer> {
|
||||
|
||||
@Override
|
||||
public void visit(Customer bean, JsonWriter jsonWriter) {
|
||||
jsonWriter.writeStringField("customerExtra", "extra4");
|
||||
jsonWriter.writeStartObject("startObj");
|
||||
jsonWriter.writeBooleanField("yesno", true);
|
||||
jsonWriter.writeEndObject();
|
||||
|
||||
jsonWriter.writeFieldName("secObj");
|
||||
jsonWriter.writeStartObject();
|
||||
jsonWriter.writeBooleanField("yesno", false);
|
||||
jsonWriter.writeEndObject();
|
||||
|
||||
jsonWriter.writeStartArray("startList");
|
||||
jsonWriter.writeBoolean(true);
|
||||
jsonWriter.writeString("one");
|
||||
jsonWriter.writeNumber(1);
|
||||
jsonWriter.writeNumber(2L);
|
||||
jsonWriter.writeNumber(new BigDecimal("34.45"));
|
||||
jsonWriter.writeNull();
|
||||
jsonWriter.writeEndArray();
|
||||
|
||||
jsonWriter.writeFieldName("secondList");
|
||||
jsonWriter.writeStartArray();
|
||||
jsonWriter.writeNumber(3L);
|
||||
jsonWriter.writeRawValue("\"rawVal\"");
|
||||
jsonWriter.writeEndArray();
|
||||
|
||||
jsonWriter.writeRaw(",\"rawField\":{\"ra\":42}");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class ContactVisitor implements JsonWriteBeanVisitor<Contact> {
|
||||
|
||||
@Override
|
||||
public void visit(Contact bean, JsonWriter jsonWriter) {
|
||||
jsonWriter.writeStringField("contactExtra", "extra3");
|
||||
}
|
||||
}
|
||||
|
||||
class BillingVisitor implements JsonWriteBeanVisitor<Address> {
|
||||
|
||||
@Override
|
||||
public void visit(Address bean, JsonWriter jsonWriter) {
|
||||
jsonWriter.writeStringField("billingExtra", "extra1");
|
||||
}
|
||||
}
|
||||
|
||||
class CountryVisitor implements JsonWriteBeanVisitor<Country> {
|
||||
|
||||
@Override
|
||||
public void visit(Country bean, JsonWriter jsonWriter) {
|
||||
jsonWriter.writeStringField("countryExtra", "extra2");
|
||||
}
|
||||
}
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package com.avaje.ebeaninternal.server.text.json;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.text.json.JsonContext;
|
||||
import com.avaje.ebean.text.json.JsonReadBeanVisitor;
|
||||
import com.avaje.ebean.text.json.JsonReadOptions;
|
||||
import com.avaje.tests.model.basic.Address;
|
||||
import com.avaje.tests.model.basic.Contact;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class TestTextJsonBeanReadVisitor extends BaseTestCase {
|
||||
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
List<Customer> list = Ebean.find(Customer.class)
|
||||
.select("id, name, status, shippingAddress")
|
||||
.fetch("billingAddress", "line1, city")
|
||||
.fetch("billingAddress.country", "*")
|
||||
.fetch("contacts", "firstName,email")
|
||||
.order().desc("id")
|
||||
.findList();
|
||||
|
||||
JsonContext json = Ebean.json();
|
||||
|
||||
JsonReadOptions options = new JsonReadOptions();
|
||||
options.addRootVisitor(new CVisitor());
|
||||
options.addVisitor("contacts", new ContactVisitor());
|
||||
options.addVisitor("billingAddress", new AVisitor());
|
||||
options.addVisitor("shippingAddress", new ASVisitor());
|
||||
|
||||
String s = json.toJson(list);
|
||||
System.out.println(s);
|
||||
|
||||
List<Customer> mList = json.toList(Customer.class, s, options);
|
||||
System.out.println("VIA STRING: " + mList);
|
||||
|
||||
StringReader reader = new StringReader(s);
|
||||
List<Customer> mList2 = json.toList(Customer.class, reader);
|
||||
System.out.println("VIA READER: " + mList2);
|
||||
|
||||
assertEquals(mList.size(), mList2.size());
|
||||
}
|
||||
|
||||
private static class CVisitor implements JsonReadBeanVisitor<Customer> {
|
||||
|
||||
@Override
|
||||
public void visit(Customer bean, Map<String, Object> unmapped) {
|
||||
System.out.println("visit customer: " + bean);
|
||||
}
|
||||
}
|
||||
|
||||
private static class AVisitor implements JsonReadBeanVisitor<Address> {
|
||||
|
||||
public void visit(Address bean, Map<String, Object> unmapped) {
|
||||
System.out.println("visit billing address: " + bean);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ASVisitor implements JsonReadBeanVisitor<Address> {
|
||||
|
||||
public void visit(Address bean, Map<String, Object> unmapped) {
|
||||
System.out.println("visit shipping address: " + bean);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ContactVisitor implements JsonReadBeanVisitor<Contact> {
|
||||
|
||||
public void visit(Contact bean, Map<String, Object> unmapped) {
|
||||
System.out.println("visit contact: " + bean);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class WriteJsonTest {
|
||||
JsonGenerator generator = jsonFactory.createGenerator(new StringWriter());
|
||||
|
||||
PathProperties pathProperties = PathProperties.parse("id,status,name,customer(id,name,address(street,city)),orders(qty,product(sku,prodName))");
|
||||
WriteJson writeJson = new WriteJson(null, generator, pathProperties, null, JsonConfig.Include.ALL);
|
||||
WriteJson writeJson = new WriteJson(null, generator, pathProperties, null, null, JsonConfig.Include.ALL);
|
||||
|
||||
WriteJson.WriteBean rootLevel = writeJson.createWriteBean(null, null);
|
||||
assertTrue(rootLevel.currentIncludeProps.contains("id"));
|
||||
|
||||
Reference in New Issue
Block a user