diff --git a/.gitignore b/.gitignore index 3e6888cd7..f474a9035 100644 Binary files a/.gitignore and b/.gitignore differ diff --git a/android-test/gradlew b/android-test/gradlew old mode 100644 new mode 100755 diff --git a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/ImageMixin.java b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/ImageMixin.java index b918001d7..2c923305b 100644 --- a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/ImageMixin.java +++ b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/ImageMixin.java @@ -7,15 +7,14 @@ import com.alibaba.fastjson2.reader.ObjectReaders; import com.alibaba.fastjson2.writer.ObjectWriter; import com.alibaba.fastjson2.writer.ObjectWriters; -import static com.alibaba.fastjson2.reader.ObjectReaders.fieldReader; -import static com.alibaba.fastjson2.reader.ObjectReaders.fieldReaderInt; +import static com.alibaba.fastjson2.reader.ObjectReaders.*; @JSONAutowired public class ImageMixin { public static final ObjectWriter objectWriter = ObjectWriters.objectWriter( Image.class, ObjectWriters.fieldWriter("height", Image::getHeight), - ObjectWriters.fieldWriter("size", Image.Size.class, (Image e) -> e.getSize()), + ObjectWriters.fieldWriter("size", Image.Size.class, Image::getSize), ObjectWriters.fieldWriter("title", Image::getTitle), ObjectWriters.fieldWriter("uri", Image::getUri), ObjectWriters.fieldWriter("width", Image::getWidth) @@ -24,9 +23,9 @@ public class ImageMixin { public static final ObjectReader objectReader = ObjectReaders.of( Image::new, fieldReaderInt("height", Image::setHeight), - fieldReader("size", Image.Size.class, (Image o, Image.Size v) -> o.setSize(v)), - fieldReader("title", String.class, (Image o, String v) -> o.setTitle(v)), - fieldReader("uri", String.class, (Image o, String v) -> o.setUri(v)), + fieldReader("size", Image.Size.class, Image::setSize), + fieldReaderString("title", Image::setTitle), + fieldReaderString("uri", Image::setUri), fieldReaderInt("width", Image::setWidth) ); } diff --git a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaContentMixin.java b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaContentMixin.java index dfc3be6ca..24e38987e 100644 --- a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaContentMixin.java +++ b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaContentMixin.java @@ -10,7 +10,6 @@ import com.alibaba.fastjson2.writer.ObjectWriter; import com.alibaba.fastjson2.writer.ObjectWriters; import java.util.ArrayList; -import java.util.List; import static com.alibaba.fastjson2.reader.ObjectReaders.*; @@ -18,13 +17,13 @@ import static com.alibaba.fastjson2.reader.ObjectReaders.*; public class MediaContentMixin { public static final ObjectWriter objectWriter = ObjectWriters.objectWriter( MediaContent.class, - ObjectWriters.fieldWriter("media", Media.class, (MediaContent e) -> e.getMedia()), - ObjectWriters.fieldWriterList("images", Image.class, (MediaContent e) -> e.getImages()) + ObjectWriters.fieldWriter("media", Media.class, MediaContent::getMedia), + ObjectWriters.fieldWriterList("images", Image.class, MediaContent::getImages) ); public static final ObjectReader objectReader = ObjectReaders.of( MediaContent::new, - fieldReader("media", Media.class, (MediaContent o, Media v) -> o.setMedia(v)), - fieldReaderList("images", Image.class, ArrayList::new, (MediaContent o, List v) -> o.setImages(v)) + fieldReader("media", Media.class, MediaContent::setMedia), + fieldReaderList("images", Image.class, ArrayList::new, MediaContent::setImages) ); } diff --git a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaMixin.java b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaMixin.java index aba70bb50..40e934598 100644 --- a/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaMixin.java +++ b/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay/mixin/MediaMixin.java @@ -7,26 +7,23 @@ import com.alibaba.fastjson2.reader.ObjectReaders; import com.alibaba.fastjson2.writer.ObjectWriter; import com.alibaba.fastjson2.writer.ObjectWriters; -import java.util.ArrayList; -import java.util.List; - import static com.alibaba.fastjson2.reader.ObjectReaders.*; @JSONAutowired public class MediaMixin { public static final ObjectWriter objectWriter = ObjectWriters.objectWriter( Media.class, - ObjectWriters.fieldWriter("bitrate", (Media e) -> e.getBitrate()), - ObjectWriters.fieldWriter("duration", (Media e) -> e.getDuration()), - ObjectWriters.fieldWriter("format", (Media e) -> e.getFormat()), - ObjectWriters.fieldWriter("height", (Media e) -> e.getHeight()), - ObjectWriters.fieldWriterList("persons", String.class, (Media e) -> e.getPersons()), - ObjectWriters.fieldWriter("player", Media.Player.class, (Media e) -> e.getPlayer()), - ObjectWriters.fieldWriter("size", (Media e) -> e.getSize()), - ObjectWriters.fieldWriter("title", (Media e) -> e.getTitle()), - ObjectWriters.fieldWriter("uri", (Media e) -> e.getUri()), - ObjectWriters.fieldWriter("width", (Media e) -> e.getWidth()), - ObjectWriters.fieldWriter("copyright", (Media e) -> e.getCopyright()) + ObjectWriters.fieldWriter("bitrate", Media::getBitrate), + ObjectWriters.fieldWriter("duration", Media::getDuration), + ObjectWriters.fieldWriter("format", Media::getFormat), + ObjectWriters.fieldWriter("height", Media::getHeight), + ObjectWriters.fieldWriterListString("persons", Media::getPersons), + ObjectWriters.fieldWriter("player", Media.Player.class, Media::getPlayer), + ObjectWriters.fieldWriter("size", Media::getSize), + ObjectWriters.fieldWriter("title", Media::getTitle), + ObjectWriters.fieldWriter("uri", Media::getUri), + ObjectWriters.fieldWriter("width", Media::getWidth), + ObjectWriters.fieldWriter("copyright", Media::getCopyright) ); public static final ObjectReader objectReader = ObjectReaders.of( @@ -35,8 +32,8 @@ public class MediaMixin { fieldReaderLong("duration", Media::setDuration), fieldReaderString("format", Media::setFormat), fieldReaderInt("height", Media::setHeight), - fieldReaderList("persons", String.class, ArrayList::new, (Media o, List v) -> o.setPersons(v)), - fieldReader("player", Media.Player.class, (Media o, Media.Player v) -> o.setPlayer(v)), + fieldReaderListStr("persons", Media::setPersons), + fieldReader("player", Media.Player.class, Media::setPlayer), fieldReaderLong("size", Media::setSize), fieldReaderString("title", Media::setTitle), fieldReaderString("uri", Media::setUri), diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderCreator.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderCreator.java index d6f71cb11..9fbe0107c 100644 --- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderCreator.java +++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderCreator.java @@ -2508,7 +2508,13 @@ public class ObjectReaderCreator { Class fieldClassResolved = null; if (!(fieldType instanceof Class)) { - fieldTypeResolved = BeanUtils.getFieldType(TypeReference.get(objectType), objectClass, method, fieldType); + TypeReference objectTypeReference; + if (objectType == null) { + objectTypeReference = null; + } else { + objectTypeReference = TypeReference.get(objectType); + } + fieldTypeResolved = BeanUtils.getFieldType(objectTypeReference, objectClass, method, fieldType); fieldClassResolved = TypeUtils.getMapping(fieldTypeResolved); } diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaders.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaders.java index d2dfd0dce..a38928821 100644 --- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaders.java +++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaders.java @@ -56,7 +56,11 @@ public class ObjectReaders { public static ObjectReader objectReader( Function, T> creator, FieldReader... fieldReaders) { - return ObjectReaderCreator.INSTANCE.createObjectReaderNoneDefaultConstructor(null, creator, fieldReaders); + return ObjectReaderCreator.INSTANCE.createObjectReaderNoneDefaultConstructor( + null, + creator, + fieldReaders + ); } public static FieldReader fieldReader(String fieldName, Class fieldClass) { @@ -151,6 +155,13 @@ public class ObjectReaders { return new FieldReaderListFuncImpl<>(listCreator, null, function, itemType, fieldName); } + public static FieldReader fieldReaderListStr( + String fieldName, + BiConsumer> function + ) { + return new FieldReaderListFuncImpl<>(ArrayList::new, null, function, String.class, fieldName); + } + public static FieldReader fieldReaderList( String fieldName, Type itemType, diff --git a/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java b/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java index d72fb40b4..a7fc8dd7e 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java @@ -1480,15 +1480,21 @@ public abstract class BeanUtils { } } - public static Type getFieldType(TypeReference type, Class raw, Member field, Type fieldType) { - Class declaringClass = field.getDeclaringClass(); + public static Type getFieldType(TypeReference typeReference, Class raw, Member field, Type fieldType) { + Class declaringClass; + if (field == null) { + declaringClass = null; + } else { + declaringClass = field.getDeclaringClass(); + } while (raw != Object.class) { + Type type = typeReference == null ? null : typeReference.getType(); if (declaringClass == raw) { - return resolve(type.getType(), declaringClass, fieldType); + return resolve(type, declaringClass, fieldType); } - type = TypeReference.get(resolve(type.getType(), raw, raw.getGenericSuperclass())); - raw = type.getRawType(); + typeReference = TypeReference.get(resolve(type, raw, raw.getGenericSuperclass())); + raw = typeReference.getRawType(); } return null; } diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriters.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriters.java index 481281eb9..004521853 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriters.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriters.java @@ -5,7 +5,9 @@ import com.alibaba.fastjson2.function.ToByteFunction; import com.alibaba.fastjson2.function.ToFloatFunction; import com.alibaba.fastjson2.function.ToShortFunction; import com.alibaba.fastjson2.util.ParameterizedTypeImpl; +import com.alibaba.fastjson2.util.TypeUtils; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.function.*; @@ -25,7 +27,7 @@ public class ObjectWriters { return INSTANCE.createObjectWriter(objectType, fieldWriters); } - public static ObjectWriter of(Class objectType, FieldWriter... fieldWriters) { + public static ObjectWriter of(Class objectType, FieldWriter... fieldWriters) { return INSTANCE.createObjectWriter(objectType, fieldWriters); } @@ -124,6 +126,16 @@ public class ObjectWriters { } public static FieldWriter fieldWriterList(String fieldName, Class itemType, Function> function) { - return INSTANCE.createFieldWriter(fieldName, new ParameterizedTypeImpl(List.class, itemType), List.class, function); + ParameterizedType listType; + if (itemType == String.class) { + listType = TypeUtils.PARAM_TYPE_LIST_STR; + } else { + listType = new ParameterizedTypeImpl(List.class, itemType); + } + return INSTANCE.createFieldWriter(fieldName, listType, List.class, function); + } + + public static FieldWriter fieldWriterListString(String fieldName, Function> function) { + return INSTANCE.createFieldWriter(fieldName, TypeUtils.PARAM_TYPE_LIST_STR, List.class, function); } } diff --git a/extension/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java b/core/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java similarity index 67% rename from extension/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java rename to core/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java index cf64a8db7..865a87f65 100644 --- a/extension/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java +++ b/core/src/test/java/com/alibaba/fastjson2/reader/ObjectReadersTest.java @@ -2,8 +2,10 @@ package com.alibaba.fastjson2.reader; import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.util.Fnv; +import com.alibaba.fastjson2.util.TypeUtils; import org.junit.jupiter.api.Test; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -143,6 +145,17 @@ public class ObjectReadersTest { assertEquals("12.34", bean.value); } + @Test + public void testString_1() { + ObjectReader objectReader = ObjectReaders.objectReader( + Bean5.class, + Bean5::new, + fieldReader("value", String.class, String.class, Bean5::setValue) + ); + Bean5 bean = objectReader.readObject(JSONReader.of("{\"value\":\"12.34\"}")); + assertEquals("12.34", bean.value); + } + static class Bean5 { private String value; @@ -154,4 +167,55 @@ public class ObjectReadersTest { this.value = value; } } + + @Test + public void testList() { + ObjectReader objectReader = ObjectReaders.objectReader( + Bean6.class, + Bean6::new, + fieldReaderListStr("value", Bean6::setValues) + ); + Bean6 bean = objectReader.readObject(JSONReader.of("{\"value\":[\"12\",\"34\"]}")); + assertEquals(2, bean.values.size()); + assertEquals("12", bean.values.get(0)); + assertEquals("34", bean.values.get(1)); + } + + @Test + public void testList_1() { + ObjectReader objectReader = ObjectReaders.objectReader( + Bean6.class, + Bean6::new, + fieldReaderList("value", String.class, Bean6::setValues) + ); + Bean6 bean = objectReader.readObject(JSONReader.of("{\"value\":[\"12\",\"34\"]}")); + assertEquals(2, bean.values.size()); + assertEquals("12", bean.values.get(0)); + assertEquals("34", bean.values.get(1)); + } + + @Test + public void testList_2() { + ObjectReader objectReader = ObjectReaders.objectReader( + Bean6.class, + Bean6::new, + fieldReader("value", TypeUtils.PARAM_TYPE_LIST_STR, List.class, Bean6::setValues) + ); + Bean6 bean = objectReader.readObject(JSONReader.of("{\"value\":[\"12\",\"34\"]}")); + assertEquals(2, bean.values.size()); + assertEquals("12", bean.values.get(0)); + assertEquals("34", bean.values.get(1)); + } + + static class Bean6 { + private List values; + + public List getValues() { + return values; + } + + public void setValues(List values) { + this.values = values; + } + } } diff --git a/core/src/test/java/com/alibaba/fastjson2/writer/ObjectWritersTest.java b/core/src/test/java/com/alibaba/fastjson2/writer/ObjectWritersTest.java index d1b5ebeda..cfaded242 100644 --- a/core/src/test/java/com/alibaba/fastjson2/writer/ObjectWritersTest.java +++ b/core/src/test/java/com/alibaba/fastjson2/writer/ObjectWritersTest.java @@ -1,13 +1,15 @@ package com.alibaba.fastjson2.writer; import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.util.TypeUtils; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; import java.util.function.ToIntFunction; import java.util.function.ToLongFunction; -import static com.alibaba.fastjson2.writer.ObjectWriters.fieldWriter; -import static com.alibaba.fastjson2.writer.ObjectWriters.objectWriter; +import static com.alibaba.fastjson2.writer.ObjectWriters.*; import static org.junit.jupiter.api.Assertions.assertEquals; public class ObjectWritersTest { @@ -114,4 +116,173 @@ public class ObjectWritersTest { return id; } } + + @Test + public void test3() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean3.class, + fieldWriterListString("names", Bean3::getNames) + ); + + Bean3 bean = new Bean3(); + bean.names = new ArrayList<>(); + bean.names.add("1"); + bean.names.add("2"); + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"names\":[\"1\",\"2\"]}", jsonWriter.toString()); + } + + @Test + public void test3_1() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean3.class, + fieldWriterList("names", String.class, Bean3::getNames) + ); + + Bean3 bean = new Bean3(); + bean.names = new ArrayList<>(); + bean.names.add("1"); + bean.names.add("2"); + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"names\":[\"1\",\"2\"]}", jsonWriter.toString()); + } + + @Test + public void test3_2() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean3.class, + fieldWriter("names", TypeUtils.PARAM_TYPE_LIST_STR, List.class, Bean3::getNames) + ); + + Bean3 bean = new Bean3(); + bean.names = new ArrayList<>(); + bean.names.add("1"); + bean.names.add("2"); + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"names\":[\"1\",\"2\"]}", jsonWriter.toString()); + } + + public static class Bean3 { + private List names; + + public List getNames() { + return names; + } + + public void setNames(List names) { + this.names = names; + } + } + + @Test + public void test4() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean4.class, + fieldWriterList("names", Long.class, Bean4::getNames) + ); + + Bean4 bean = new Bean4(); + bean.names = new ArrayList<>(); + bean.names.add(1L); + bean.names.add(2L); + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"names\":[1,2]}", jsonWriter.toString()); + } + + public static class Bean4 { + private List names; + + public List getNames() { + return names; + } + + public void setNames(List names) { + this.names = names; + } + } + + @Test + public void testFloat() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean5.class, + fieldWriter("value", Bean5::getValue) + ); + + Bean5 bean = new Bean5(); + bean.value = 12.0F; + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"value\":12.0}", jsonWriter.toString()); + } + + public static class Bean5 { + private Float value; + + public Float getValue() { + return value; + } + } + + @Test + public void testDouble() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean6.class, + fieldWriter("value", Bean6::getValue) + ); + + Bean6 bean = new Bean6(); + bean.value = 12.0D; + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"value\":12.0}", jsonWriter.toString()); + } + + public static class Bean6 { + private Double value; + + public Double getValue() { + return value; + } + } + + @Test + public void testBoolean() throws Exception { + ObjectWriter objectWriter = ObjectWriters.of( + Bean7.class, + fieldWriter("value", Bean7::getValue) + ); + + Bean7 bean = new Bean7(); + bean.value = true; + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"value\":true}", jsonWriter.toString()); + } + + @Test + public void testBoolean_1() throws Exception { + ObjectWriter objectWriter = ObjectWriters.objectWriter( + Bean7.class, + 0, + fieldWriter("value", Bean7::getValue) + ); + + Bean7 bean = new Bean7(); + bean.value = true; + JSONWriter jsonWriter = JSONWriter.of(); + objectWriter.write(jsonWriter, bean); + assertEquals("{\"value\":true}", jsonWriter.toString()); + } + + public static class Bean7 { + private Boolean value; + + public Boolean getValue() { + return value; + } + } } diff --git a/example-graalvm-native/src/main/java/com/alibaba/fastjson2/example/graalvm_native/App.java b/example-graalvm-native/src/main/java/com/alibaba/fastjson2/example/graalvm_native/App.java index f9e07676a..546798cc1 100644 --- a/example-graalvm-native/src/main/java/com/alibaba/fastjson2/example/graalvm_native/App.java +++ b/example-graalvm-native/src/main/java/com/alibaba/fastjson2/example/graalvm_native/App.java @@ -69,29 +69,29 @@ public class App { private static void registerReaderAndWriter() { JSON.register(MediaContent.class, ObjectWriters.objectWriter( MediaContent.class, - ObjectWriters.fieldWriter("media", Media.class, (MediaContent e) -> e.getMedia()), - ObjectWriters.fieldWriterList("images", Image.class, (MediaContent e) -> e.getImages()) + ObjectWriters.fieldWriter("media", Media.class, MediaContent::getMedia), + ObjectWriters.fieldWriterList("images", Image.class, MediaContent::getImages) )); JSON.register(MediaContent.class, ObjectReaders.of( MediaContent::new, - fieldReader("media", Media.class, (MediaContent o, Media v) -> o.setMedia(v)), - fieldReaderList("images", Image.class, ArrayList::new, (MediaContent o, List v) -> o.setImages(v)) + fieldReader("media", Media.class, MediaContent::setMedia), + fieldReaderList("images", Image.class, ArrayList::new, MediaContent::setImages) )); JSON.register(Media.class, ObjectWriters.objectWriter( Media.class, - ObjectWriters.fieldWriter("bitrate", (Media e) -> e.getBitrate()), - ObjectWriters.fieldWriter("duration", (Media e) -> e.getDuration()), - ObjectWriters.fieldWriter("format", (Media e) -> e.getFormat()), - ObjectWriters.fieldWriter("height", (Media e) -> e.getHeight()), - ObjectWriters.fieldWriterList("persons", String.class, (Media e) -> e.getPersons()), - ObjectWriters.fieldWriter("player", Player.class, (Media e) -> e.getPlayer()), - ObjectWriters.fieldWriter("size", (Media e) -> e.getSize()), - ObjectWriters.fieldWriter("title", (Media e) -> e.getTitle()), - ObjectWriters.fieldWriter("uri", (Media e) -> e.getUri()), - ObjectWriters.fieldWriter("width", (Media e) -> e.getWidth()), - ObjectWriters.fieldWriter("copyright", (Media e) -> e.getCopyright()) + ObjectWriters.fieldWriter("bitrate", Media::getBitrate), + ObjectWriters.fieldWriter("duration", Media::getDuration), + ObjectWriters.fieldWriter("format", Media::getFormat), + ObjectWriters.fieldWriter("height", Media::getHeight), + ObjectWriters.fieldWriterList("persons", String.class, Media::getPersons), + ObjectWriters.fieldWriter("player", Player.class, Media::getPlayer), + ObjectWriters.fieldWriter("size", Media::getSize), + ObjectWriters.fieldWriter("title", Media::getTitle), + ObjectWriters.fieldWriter("uri", Media::getUri), + ObjectWriters.fieldWriter("width", Media::getWidth), + ObjectWriters.fieldWriter("copyright", Media::getCopyright) )); JSON.register(Media.class, ObjectReaders.of( @@ -100,8 +100,8 @@ public class App { fieldReaderLong("duration", Media::setDuration), fieldReaderString("format", Media::setFormat), fieldReaderInt("height", Media::setHeight), - fieldReaderList("persons", String.class, ArrayList::new, (Media o, List v) -> o.setPersons(v)), - fieldReader("player", Player.class, (Media o, Player v) -> o.setPlayer(v)), + fieldReaderList("persons", String.class, ArrayList::new, Media::setPersons), + fieldReader("player", Player.class, Media::setPlayer), fieldReaderLong("size", Media::setSize), fieldReaderString("title", Media::setTitle), fieldReaderString("uri", Media::setUri), @@ -112,7 +112,7 @@ public class App { JSON.register(Image.class, ObjectWriters.objectWriter( Image.class, ObjectWriters.fieldWriter("height", Image::getHeight), - ObjectWriters.fieldWriter("size", Size.class, (Image e) -> e.getSize()), + ObjectWriters.fieldWriter("size", Size.class, Image::getSize), ObjectWriters.fieldWriter("title", Image::getTitle), ObjectWriters.fieldWriter("uri", Image::getUri), ObjectWriters.fieldWriter("width", Image::getWidth) @@ -121,9 +121,9 @@ public class App { JSON.register(Image.class, ObjectReaders.of( Image::new, fieldReaderInt("height", Image::setHeight), - fieldReader("size", Size.class, (Image o, Size v) -> o.setSize(v)), - fieldReader("title", String.class, (Image o, String v) -> o.setTitle(v)), - fieldReader("uri", String.class, (Image o, String v) -> o.setUri(v)), + fieldReader("size", Size.class, Image::setSize), + fieldReaderString("title", Image::setTitle), + fieldReaderString("uri", Image::setUri), fieldReaderInt("width", Image::setWidth) )); }