#318 - JSON - toBean error at Transient (with support for #327, #328, #329)

This commit is contained in:
Robin Bygrave
2015-07-19 21:41:20 +12:00
parent a00980c61f
commit 160e4d7dd1
25 changed files with 633 additions and 1358 deletions
@@ -19,7 +19,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);
WriteJson writeJson = new WriteJson(null, generator, pathProperties, null);
WriteJson.WriteBean rootLevel = writeJson.createWriteBean(null, null);
assertTrue(rootLevel.currentIncludeProps.contains("id"));
@@ -0,0 +1,44 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.annotation.Sql;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.Entity;
import javax.persistence.Id;
@Sql
@Entity
public class EJsonJacksonIgnore {
@Id
private Long id;
private String name;
@JsonIgnore
private Boolean basic;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getBasic() {
return basic;
}
public void setBasic(Boolean basic) {
this.basic = basic;
}
}
@@ -0,0 +1,57 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.annotation.Sql;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.util.List;
@Sql
@Entity
public class EJsonTransientList {
@Id
private Long id;
private String name;
@Transient
private Boolean basic;
@Transient
private List<String> fileNames;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getBasic() {
return basic;
}
public void setBasic(Boolean basic) {
this.basic = basic;
}
public List<String> getFileNames() {
return fileNames;
}
public void setFileNames(List<String> fileNames) {
this.fileNames = fileNames;
}
}
@@ -0,0 +1,63 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.annotation.Sql;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
@Sql
@Entity
public class EJsonTransientObject {
@Id
private Long id;
private String name;
@Transient
private Boolean basic;
@Transient
private SomeBean someBean;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getBasic() {
return basic;
}
public void setBasic(Boolean basic) {
this.basic = basic;
}
public SomeBean getSomeBean() {
return someBean;
}
public void setSomeBean(SomeBean someBean) {
this.someBean = someBean;
}
public static class SomeBean {
public String name;
public String baz;
}
}
@@ -0,0 +1,42 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.Ebean;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
public class TestJacksonIgnore {
@Test
public void testJacksonJsonIgnoreAnnotation() throws Exception {
EJsonJacksonIgnore bean = new EJsonJacksonIgnore();
bean.setId(99L);
bean.setName("foo");
bean.setBasic(Boolean.TRUE);
String asJson = Ebean.json().toJson(bean);
// ignored on write
assertFalse(asJson.contains("basic"));
EJsonJacksonIgnore bean1 = Ebean.json().toBean(EJsonJacksonIgnore.class, asJson);
assertNull(bean1.getBasic());
assertEquals(bean.getId(), bean1.getId());
assertEquals(bean.getName(), bean1.getName());
// ignored on read
String jsonFull = "{\"id\":99,\"name\":\"foo\",\"basic\":true}";
bean1 = Ebean.json().toBean(EJsonJacksonIgnore.class, jsonFull);
assertNull(bean1.getBasic());
assertEquals(bean.getId(), bean1.getId());
assertEquals(bean.getName(), bean1.getName());
}
}
@@ -0,0 +1,25 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.Ebean;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestTransientListProperty {
@Test
public void testWithTransientListProperty() throws Exception {
String rawJson = "{\"basic\":true,\"fileNames\":[\"1\"]}";
EJsonTransientList bean = Ebean.json().toBean(EJsonTransientList.class, rawJson);
assertEquals(true, bean.getBasic());
assertEquals(1, bean.getFileNames().size());
String asJson = Ebean.json().toJson(bean);
assertEquals(rawJson, asJson);
}
}
@@ -0,0 +1,27 @@
package com.avaje.tests.json.transientproperties;
import com.avaje.ebean.Ebean;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestTransientObjectProperty {
@Test
public void testToBeanToJson() throws Exception {
String rawJson = "{\"name\":\"entityBeanName\",\"basic\":true,\"someBean\":{\"name\":\"transientBeanName\",\"baz\":\"foo\"}}";
EJsonTransientObject bean = Ebean.json().toBean(EJsonTransientObject.class, rawJson);
assertEquals("entityBeanName",bean.getName());
assertEquals(true,bean.getBasic());
assertEquals("transientBeanName",bean.getSomeBean().name);
assertEquals("foo",bean.getSomeBean().baz);
String asJson = Ebean.json().toJson(bean);
assertEquals(rawJson, asJson);
}
}
@@ -1,9 +1,8 @@
package com.avaje.tests.model.basic;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
import com.avaje.ebean.annotation.EnumValue;
import com.avaje.ebean.annotation.JsonIgnore;
import com.avaje.ebean.annotation.Where;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
@@ -13,9 +12,10 @@ import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.avaje.ebean.annotation.EnumValue;
import com.avaje.ebean.annotation.Where;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
/**
* Customer entity bean.
@@ -43,6 +43,9 @@ public class Customer extends BasicDomain {
@Transient
Boolean selected;
@JsonIgnore
//@Expose(deserialize = false, serialize = false)
@Transient
ReentrantLock lock = new ReentrantLock();
@@ -29,7 +29,7 @@ public class TestJsonBeanDescriptorParse extends BaseTestCase {
StringReader reader = new StringReader("{\"id\":123,\"name\":\"Hello rob\"}");
JsonParser parser = server.json().createParser(reader);
ReadJson readJson = new ReadJson(parser, null);
ReadJson readJson = new ReadJson(parser, null, null);
Customer customer = descriptor.jsonRead(readJson, null);