mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-10-24 15:55:55 +00:00
#585 - Refactor of ScalarType jsonWrite() method such that it only takes JsonGenerator - part 3, remove JsonToken from jsonRead()
This commit is contained in:
@@ -1262,7 +1262,7 @@ public class BeanProperty implements ElPropertyValue, Property {
|
||||
// expect to read non-null json value
|
||||
Object objValue;
|
||||
if (scalarType != null) {
|
||||
objValue = scalarType.jsonRead(ctx.getParser(), event);
|
||||
objValue = scalarType.jsonRead(ctx.getParser());
|
||||
} else {
|
||||
try {
|
||||
objValue = ctx.readValueUsingObjectMapper(propertyType);
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.avaje.ebean.text.StringParser;
|
||||
import com.avaje.ebeanservice.docstore.api.mapping.DocPropertyType;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
|
||||
import java.io.DataInput;
|
||||
import java.io.DataOutput;
|
||||
@@ -203,7 +202,7 @@ public interface ScalarType<T> extends StringParser, StringFormatter, ScalarData
|
||||
/**
|
||||
* Read the value from JsonParser.
|
||||
*/
|
||||
T jsonRead(JsonParser parser, JsonToken event) throws IOException;
|
||||
T jsonRead(JsonParser parser) throws IOException;
|
||||
|
||||
/**
|
||||
* Write the value to the JsonGenerator.
|
||||
|
||||
@@ -70,8 +70,8 @@ public abstract class ScalarTypeBaseDate<T> extends ScalarTypeBase<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
if (JsonToken.VALUE_NUMBER_INT == event) {
|
||||
public T jsonRead(JsonParser parser) throws IOException {
|
||||
if (JsonToken.VALUE_NUMBER_INT == parser.getCurrentToken()) {
|
||||
return convertFromMillis(parser.getLongValue());
|
||||
} else {
|
||||
return convertFromDate(Date.valueOf(parser.getText()));
|
||||
|
||||
@@ -85,9 +85,9 @@ public abstract class ScalarTypeBaseDateTime<T> extends ScalarTypeBase<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public T jsonRead(JsonParser parser) throws IOException {
|
||||
|
||||
switch (event) {
|
||||
switch (parser.getCurrentToken()) {
|
||||
case VALUE_NUMBER_INT: {
|
||||
return convertFromMillis(parser.getLongValue());
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ public abstract class ScalarTypeBaseVarchar<T> extends ScalarTypeBase<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public T jsonRead(JsonParser parser) throws IOException {
|
||||
return parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public class ScalarTypeBigDecimal extends ScalarTypeBase<BigDecimal> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public BigDecimal jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getDecimalValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -331,8 +331,8 @@ public class ScalarTypeBoolean {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean jsonRead(JsonParser parser, JsonToken event) {
|
||||
return JsonToken.VALUE_TRUE == event ? Boolean.TRUE : Boolean.FALSE;
|
||||
public Boolean jsonRead(JsonParser parser) {
|
||||
return JsonToken.VALUE_TRUE == parser.getCurrentToken() ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -49,7 +49,7 @@ public class ScalarTypeByte extends ScalarTypeBase<Byte> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Byte jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Byte jsonRead(JsonParser parser) throws IOException {
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
parser.readBinaryValue(os);
|
||||
byte[] bytes = os.toByteArray();
|
||||
|
||||
@@ -47,7 +47,7 @@ public abstract class ScalarTypeBytesBase extends ScalarTypeBase<byte[]> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public byte[] jsonRead(JsonParser parser) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(500);
|
||||
parser.readBinaryValue(out);
|
||||
return out.toByteArray();
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.avaje.ebeaninternal.server.type;
|
||||
import com.avaje.ebeanservice.docstore.api.mapping.DocPropertyType;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataInput;
|
||||
@@ -70,7 +69,7 @@ public class ScalarTypeBytesEncrypted implements ScalarType<byte[]> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public byte[] jsonRead(JsonParser parser) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(500);
|
||||
parser.readBinaryValue(out);
|
||||
return out.toByteArray();
|
||||
|
||||
@@ -64,7 +64,7 @@ public class ScalarTypeCharArray extends ScalarTypeBaseVarchar<char[]> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public char[] jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public char[] jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getValueAsString().toCharArray();
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScalarTypeDouble extends ScalarTypeBase<Double> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Double jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getDoubleValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ public class ScalarTypeDuration extends ScalarTypeBase<Duration> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Duration jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Duration jsonRead(JsonParser parser) throws IOException {
|
||||
return Duration.parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -134,8 +134,8 @@ public class ScalarTypeEncryptedWrapper<T> implements ScalarType<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public T jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
return wrapped.jsonRead(parser, event);
|
||||
public T jsonRead(JsonParser parser) throws IOException {
|
||||
return wrapped.jsonRead(parser);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -233,7 +233,7 @@ public class ScalarTypeEnumStandard {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Object jsonRead(JsonParser parser) throws IOException {
|
||||
return parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ public class ScalarTypeFile extends ScalarTypeBase<File> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public File jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public File jsonRead(JsonParser parser) throws IOException {
|
||||
File tempFile = File.createTempFile(prefix, suffix, directory);
|
||||
OutputStream os = getOutputStream(tempFile);
|
||||
parser.readBinaryValue(os);
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScalarTypeFloat extends ScalarTypeBase<Float> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Float jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getFloatValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScalarTypeInteger extends ScalarTypeBase<Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Integer jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getIntValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -77,13 +77,11 @@ public class ScalarTypeJodaLocalTime extends ScalarTypeBase<LocalTime> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalTime jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
if (JsonToken.VALUE_NUMBER_INT == event) {
|
||||
long millis = parser.getLongValue();
|
||||
return convertFromMillis(millis);
|
||||
public LocalTime jsonRead(JsonParser parser) throws IOException {
|
||||
if (JsonToken.VALUE_NUMBER_INT == parser.getCurrentToken()) {
|
||||
return convertFromMillis(parser.getLongValue());
|
||||
} else {
|
||||
String string = parser.getValueAsString();
|
||||
throw new RuntimeException("convert " + string);
|
||||
return parse(parser.getValueAsString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -204,11 +204,11 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase<Map> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Map jsonRead(JsonParser parser) throws IOException {
|
||||
// at this point the BeanProperty has read the START_OBJECT token
|
||||
// to check for a null value. Pass the START_OBJECT token through to
|
||||
// the EJson parsing so that it knows the first token has been read
|
||||
return EJson.parseObject(parser, event);
|
||||
return EJson.parseObject(parser, parser.getCurrentToken());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ public abstract class ScalarTypeJsonNode extends ScalarTypeBase<JsonNode> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public JsonNode jsonRead(JsonParser parser) throws IOException {
|
||||
// at this point the BeanProperty has read the START_OBJECT token
|
||||
// to check for a null value.
|
||||
return objectMapper.readValue(parser, JsonNode.class);
|
||||
|
||||
@@ -95,7 +95,7 @@ public class ScalarTypeLocalTime extends ScalarTypeBase<LocalTime> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalTime jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public LocalTime jsonRead(JsonParser parser) throws IOException {
|
||||
return LocalTime.parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScalarTypeLong extends ScalarTypeBase<Long> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Long jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getLongValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ public class ScalarTypeMathBigInteger extends ScalarTypeBase<BigInteger> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigInteger jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public BigInteger jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getDecimalValue().toBigInteger();
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ public class ScalarTypeMonthDay extends ScalarTypeBase<MonthDay> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public MonthDay jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public MonthDay jsonRead(JsonParser parser) throws IOException {
|
||||
return parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -118,11 +118,11 @@ public class ScalarTypePostgresHstore extends ScalarTypeBase<Map> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Map jsonRead(JsonParser parser) throws IOException {
|
||||
// at this point the BeanProperty has read the START_OBJECT token
|
||||
// to check for a null value. Pass the START_OBJECT token through to
|
||||
// the EJson parsing so that it knows the first token has been read
|
||||
return EJson.parseObject(parser, event);
|
||||
return EJson.parseObject(parser, parser.getCurrentToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -87,7 +87,7 @@ public class ScalarTypeShort extends ScalarTypeBase<Short> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Short jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Short jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getShortValue();
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ScalarTypeString extends ScalarTypeBase<String> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public String jsonRead(JsonParser parser) throws IOException {
|
||||
return parser.getValueAsString();
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ public class ScalarTypeTime extends ScalarTypeBase<Time> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Time jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Time jsonRead(JsonParser parser) throws IOException {
|
||||
return parse(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ public class ScalarTypeUUIDBinary extends ScalarTypeBase<UUID> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public UUID jsonRead(JsonParser parser) throws IOException {
|
||||
return UUID.fromString(parser.getValueAsString());
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ public class ScalarTypeUUIDNative extends ScalarTypeBase<UUID> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public UUID jsonRead(JsonParser parser) throws IOException {
|
||||
String strValue = parser.getValueAsString();
|
||||
return strValue == null ? null : parse(strValue);
|
||||
}
|
||||
|
||||
@@ -183,8 +183,8 @@ public class ScalarTypeWrapper<B, S> implements ScalarType<B> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public B jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
S object = scalarType.jsonRead(parser, event);
|
||||
public B jsonRead(JsonParser parser) throws IOException {
|
||||
S object = scalarType.jsonRead(parser);
|
||||
return converter.wrapValue(object);
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ public class ScalarTypeYear extends ScalarTypeBase<Year> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Year jsonRead(JsonParser parser, JsonToken event) throws IOException {
|
||||
public Year jsonRead(JsonParser parser) throws IOException {
|
||||
return Year.of(parser.getIntValue());
|
||||
}
|
||||
|
||||
|
||||
@@ -43,9 +43,9 @@ public class JsonTester<T> {
|
||||
assertEquals(JsonToken.START_OBJECT, token);
|
||||
token = parser.nextToken();
|
||||
assertEquals(JsonToken.FIELD_NAME, token);
|
||||
token = parser.nextToken();
|
||||
parser.nextToken();
|
||||
|
||||
T val1 = type.jsonRead(parser, token);
|
||||
T val1 = type.jsonRead(parser);
|
||||
assertEquals(value, val1);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.avaje.ebeaninternal.server.type;
|
||||
|
||||
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.text.json.JsonContext;
|
||||
import com.avaje.tests.model.basic.TOne;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ScalarTypeBooleanTest {
|
||||
|
||||
JsonContext jsonContext = Ebean.getDefaultServer().json();
|
||||
|
||||
@Test
|
||||
public void json_true() {
|
||||
|
||||
TOne bean = new TOne();
|
||||
bean.setId(42);
|
||||
bean.setActive(true);
|
||||
|
||||
String json = jsonContext.toJson(bean);
|
||||
TOne tOne = jsonContext.toBean(TOne.class, json);
|
||||
|
||||
assertTrue(tOne.isActive());
|
||||
assertEquals(json, "{\"id\":42,\"active\":true}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void json_false() {
|
||||
|
||||
TOne bean = new TOne();
|
||||
bean.setId(42);
|
||||
bean.setActive(false);
|
||||
|
||||
String json = jsonContext.toJson(bean);
|
||||
TOne tOne = jsonContext.toBean(TOne.class, json);
|
||||
|
||||
assertFalse(tOne.isActive());
|
||||
assertEquals(json, "{\"id\":42,\"active\":false}");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.avaje.ebeaninternal.server.type;
|
||||
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.basic.TJodaEntity;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.joda.time.LocalDateTime;
|
||||
import org.joda.time.LocalTime;
|
||||
@@ -43,4 +45,19 @@ public class ScalarTypeJodaLocalTimeTest {
|
||||
assertEquals(ts1, ts2);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toJson() {
|
||||
|
||||
LocalTime now = new LocalTime();
|
||||
|
||||
TJodaEntity bean = new TJodaEntity();
|
||||
bean.setId(42);
|
||||
bean.setLocalTime(now);
|
||||
|
||||
String json = Ebean.json().toJson(bean);
|
||||
TJodaEntity bean1 = Ebean.json().toBean(TJodaEntity.class, json);
|
||||
|
||||
assertEquals(bean1.getLocalTime(), now);
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,7 @@ public class ScalarTypePostgresHstoreTest {
|
||||
// simulate that here
|
||||
JsonToken token = parser.nextToken();
|
||||
assertEquals(JsonToken.START_OBJECT, token);
|
||||
return (Map<String,Object>)hstore.jsonRead(parser, token);
|
||||
return (Map<String,Object>)hstore.jsonRead(parser);
|
||||
}
|
||||
|
||||
private String generateJson(Map<String, Object> map) throws IOException {
|
||||
|
||||
Reference in New Issue
Block a user