add testcase & refactor & bug fix

This commit is contained in:
shaojin.wensj 2023-02-13 19:43:53 +08:00
parent e1ead92e28
commit e398e1d2e7
12 changed files with 324 additions and 59 deletions

BIN
.gitignore vendored

Binary file not shown.

0
android-test/gradlew vendored Normal file → Executable file
View File

View File

@ -7,15 +7,14 @@ import com.alibaba.fastjson2.reader.ObjectReaders;
import com.alibaba.fastjson2.writer.ObjectWriter; import com.alibaba.fastjson2.writer.ObjectWriter;
import com.alibaba.fastjson2.writer.ObjectWriters; import com.alibaba.fastjson2.writer.ObjectWriters;
import static com.alibaba.fastjson2.reader.ObjectReaders.fieldReader; import static com.alibaba.fastjson2.reader.ObjectReaders.*;
import static com.alibaba.fastjson2.reader.ObjectReaders.fieldReaderInt;
@JSONAutowired @JSONAutowired
public class ImageMixin { public class ImageMixin {
public static final ObjectWriter<Image> objectWriter = ObjectWriters.objectWriter( public static final ObjectWriter<Image> objectWriter = ObjectWriters.objectWriter(
Image.class, Image.class,
ObjectWriters.fieldWriter("height", Image::getHeight), 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("title", Image::getTitle),
ObjectWriters.fieldWriter("uri", Image::getUri), ObjectWriters.fieldWriter("uri", Image::getUri),
ObjectWriters.fieldWriter("width", Image::getWidth) ObjectWriters.fieldWriter("width", Image::getWidth)
@ -24,9 +23,9 @@ public class ImageMixin {
public static final ObjectReader<Image> objectReader = ObjectReaders.of( public static final ObjectReader<Image> objectReader = ObjectReaders.of(
Image::new, Image::new,
fieldReaderInt("height", Image::setHeight), fieldReaderInt("height", Image::setHeight),
fieldReader("size", Image.Size.class, (Image o, Image.Size v) -> o.setSize(v)), fieldReader("size", Image.Size.class, Image::setSize),
fieldReader("title", String.class, (Image o, String v) -> o.setTitle(v)), fieldReaderString("title", Image::setTitle),
fieldReader("uri", String.class, (Image o, String v) -> o.setUri(v)), fieldReaderString("uri", Image::setUri),
fieldReaderInt("width", Image::setWidth) fieldReaderInt("width", Image::setWidth)
); );
} }

View File

@ -10,7 +10,6 @@ import com.alibaba.fastjson2.writer.ObjectWriter;
import com.alibaba.fastjson2.writer.ObjectWriters; import com.alibaba.fastjson2.writer.ObjectWriters;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import static com.alibaba.fastjson2.reader.ObjectReaders.*; import static com.alibaba.fastjson2.reader.ObjectReaders.*;
@ -18,13 +17,13 @@ import static com.alibaba.fastjson2.reader.ObjectReaders.*;
public class MediaContentMixin { public class MediaContentMixin {
public static final ObjectWriter<MediaContent> objectWriter = ObjectWriters.objectWriter( public static final ObjectWriter<MediaContent> objectWriter = ObjectWriters.objectWriter(
MediaContent.class, MediaContent.class,
ObjectWriters.fieldWriter("media", Media.class, (MediaContent e) -> e.getMedia()), ObjectWriters.fieldWriter("media", Media.class, MediaContent::getMedia),
ObjectWriters.fieldWriterList("images", Image.class, (MediaContent e) -> e.getImages()) ObjectWriters.fieldWriterList("images", Image.class, MediaContent::getImages)
); );
public static final ObjectReader<MediaContent> objectReader = ObjectReaders.of( public static final ObjectReader<MediaContent> objectReader = ObjectReaders.of(
MediaContent::new, MediaContent::new,
fieldReader("media", Media.class, (MediaContent o, Media v) -> o.setMedia(v)), fieldReader("media", Media.class, MediaContent::setMedia),
fieldReaderList("images", Image.class, ArrayList::new, (MediaContent o, List<Image> v) -> o.setImages(v)) fieldReaderList("images", Image.class, ArrayList::new, MediaContent::setImages)
); );
} }

View File

@ -7,26 +7,23 @@ import com.alibaba.fastjson2.reader.ObjectReaders;
import com.alibaba.fastjson2.writer.ObjectWriter; import com.alibaba.fastjson2.writer.ObjectWriter;
import com.alibaba.fastjson2.writer.ObjectWriters; import com.alibaba.fastjson2.writer.ObjectWriters;
import java.util.ArrayList;
import java.util.List;
import static com.alibaba.fastjson2.reader.ObjectReaders.*; import static com.alibaba.fastjson2.reader.ObjectReaders.*;
@JSONAutowired @JSONAutowired
public class MediaMixin { public class MediaMixin {
public static final ObjectWriter<Media> objectWriter = ObjectWriters.objectWriter( public static final ObjectWriter<Media> objectWriter = ObjectWriters.objectWriter(
Media.class, Media.class,
ObjectWriters.fieldWriter("bitrate", (Media e) -> e.getBitrate()), ObjectWriters.fieldWriter("bitrate", Media::getBitrate),
ObjectWriters.fieldWriter("duration", (Media e) -> e.getDuration()), ObjectWriters.fieldWriter("duration", Media::getDuration),
ObjectWriters.fieldWriter("format", (Media e) -> e.getFormat()), ObjectWriters.fieldWriter("format", Media::getFormat),
ObjectWriters.fieldWriter("height", (Media e) -> e.getHeight()), ObjectWriters.fieldWriter("height", Media::getHeight),
ObjectWriters.fieldWriterList("persons", String.class, (Media e) -> e.getPersons()), ObjectWriters.fieldWriterListString("persons", Media::getPersons),
ObjectWriters.fieldWriter("player", Media.Player.class, (Media e) -> e.getPlayer()), ObjectWriters.fieldWriter("player", Media.Player.class, Media::getPlayer),
ObjectWriters.fieldWriter("size", (Media e) -> e.getSize()), ObjectWriters.fieldWriter("size", Media::getSize),
ObjectWriters.fieldWriter("title", (Media e) -> e.getTitle()), ObjectWriters.fieldWriter("title", Media::getTitle),
ObjectWriters.fieldWriter("uri", (Media e) -> e.getUri()), ObjectWriters.fieldWriter("uri", Media::getUri),
ObjectWriters.fieldWriter("width", (Media e) -> e.getWidth()), ObjectWriters.fieldWriter("width", Media::getWidth),
ObjectWriters.fieldWriter("copyright", (Media e) -> e.getCopyright()) ObjectWriters.fieldWriter("copyright", Media::getCopyright)
); );
public static final ObjectReader<Media> objectReader = ObjectReaders.of( public static final ObjectReader<Media> objectReader = ObjectReaders.of(
@ -35,8 +32,8 @@ public class MediaMixin {
fieldReaderLong("duration", Media::setDuration), fieldReaderLong("duration", Media::setDuration),
fieldReaderString("format", Media::setFormat), fieldReaderString("format", Media::setFormat),
fieldReaderInt("height", Media::setHeight), fieldReaderInt("height", Media::setHeight),
fieldReaderList("persons", String.class, ArrayList::new, (Media o, List<String> v) -> o.setPersons(v)), fieldReaderListStr("persons", Media::setPersons),
fieldReader("player", Media.Player.class, (Media o, Media.Player v) -> o.setPlayer(v)), fieldReader("player", Media.Player.class, Media::setPlayer),
fieldReaderLong("size", Media::setSize), fieldReaderLong("size", Media::setSize),
fieldReaderString("title", Media::setTitle), fieldReaderString("title", Media::setTitle),
fieldReaderString("uri", Media::setUri), fieldReaderString("uri", Media::setUri),

View File

@ -2508,7 +2508,13 @@ public class ObjectReaderCreator {
Class fieldClassResolved = null; Class fieldClassResolved = null;
if (!(fieldType instanceof Class)) { 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); fieldClassResolved = TypeUtils.getMapping(fieldTypeResolved);
} }

View File

@ -56,7 +56,11 @@ public class ObjectReaders {
public static <T> ObjectReader<T> objectReader( public static <T> ObjectReader<T> objectReader(
Function<Map<Long, Object>, T> creator, Function<Map<Long, Object>, T> creator,
FieldReader... fieldReaders) { FieldReader... fieldReaders) {
return ObjectReaderCreator.INSTANCE.createObjectReaderNoneDefaultConstructor(null, creator, fieldReaders); return ObjectReaderCreator.INSTANCE.createObjectReaderNoneDefaultConstructor(
null,
creator,
fieldReaders
);
} }
public static FieldReader fieldReader(String fieldName, Class fieldClass) { public static FieldReader fieldReader(String fieldName, Class fieldClass) {
@ -151,6 +155,13 @@ public class ObjectReaders {
return new FieldReaderListFuncImpl<>(listCreator, null, function, itemType, fieldName); return new FieldReaderListFuncImpl<>(listCreator, null, function, itemType, fieldName);
} }
public static <T> FieldReader fieldReaderListStr(
String fieldName,
BiConsumer<T, List<String>> function
) {
return new FieldReaderListFuncImpl<>(ArrayList::new, null, function, String.class, fieldName);
}
public static <T, V> FieldReader fieldReaderList( public static <T, V> FieldReader fieldReaderList(
String fieldName, String fieldName,
Type itemType, Type itemType,

View File

@ -1480,15 +1480,21 @@ public abstract class BeanUtils {
} }
} }
public static Type getFieldType(TypeReference type, Class<?> raw, Member field, Type fieldType) { public static Type getFieldType(TypeReference typeReference, Class<?> raw, Member field, Type fieldType) {
Class<?> declaringClass = field.getDeclaringClass(); Class<?> declaringClass;
if (field == null) {
declaringClass = null;
} else {
declaringClass = field.getDeclaringClass();
}
while (raw != Object.class) { while (raw != Object.class) {
Type type = typeReference == null ? null : typeReference.getType();
if (declaringClass == raw) { if (declaringClass == raw) {
return resolve(type.getType(), declaringClass, fieldType); return resolve(type, declaringClass, fieldType);
} }
type = TypeReference.get(resolve(type.getType(), raw, raw.getGenericSuperclass())); typeReference = TypeReference.get(resolve(type, raw, raw.getGenericSuperclass()));
raw = type.getRawType(); raw = typeReference.getRawType();
} }
return null; return null;
} }

View File

@ -5,7 +5,9 @@ import com.alibaba.fastjson2.function.ToByteFunction;
import com.alibaba.fastjson2.function.ToFloatFunction; import com.alibaba.fastjson2.function.ToFloatFunction;
import com.alibaba.fastjson2.function.ToShortFunction; import com.alibaba.fastjson2.function.ToShortFunction;
import com.alibaba.fastjson2.util.ParameterizedTypeImpl; import com.alibaba.fastjson2.util.ParameterizedTypeImpl;
import com.alibaba.fastjson2.util.TypeUtils;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.List; import java.util.List;
import java.util.function.*; import java.util.function.*;
@ -25,7 +27,7 @@ public class ObjectWriters {
return INSTANCE.createObjectWriter(objectType, fieldWriters); return INSTANCE.createObjectWriter(objectType, fieldWriters);
} }
public static ObjectWriter of(Class objectType, FieldWriter... fieldWriters) { public static <T> ObjectWriter<T> of(Class<T> objectType, FieldWriter... fieldWriters) {
return INSTANCE.createObjectWriter(objectType, fieldWriters); return INSTANCE.createObjectWriter(objectType, fieldWriters);
} }
@ -124,6 +126,16 @@ public class ObjectWriters {
} }
public static <T, V> FieldWriter fieldWriterList(String fieldName, Class<V> itemType, Function<T, List<V>> function) { public static <T, V> FieldWriter fieldWriterList(String fieldName, Class<V> itemType, Function<T, List<V>> 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 <T> FieldWriter fieldWriterListString(String fieldName, Function<T, List<String>> function) {
return INSTANCE.createFieldWriter(fieldName, TypeUtils.PARAM_TYPE_LIST_STR, List.class, function);
} }
} }

View File

@ -2,8 +2,10 @@ package com.alibaba.fastjson2.reader;
import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.util.Fnv; import com.alibaba.fastjson2.util.Fnv;
import com.alibaba.fastjson2.util.TypeUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@ -143,6 +145,17 @@ public class ObjectReadersTest {
assertEquals("12.34", bean.value); assertEquals("12.34", bean.value);
} }
@Test
public void testString_1() {
ObjectReader<Bean5> 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 { static class Bean5 {
private String value; private String value;
@ -154,4 +167,55 @@ public class ObjectReadersTest {
this.value = value; this.value = value;
} }
} }
@Test
public void testList() {
ObjectReader<Bean6> 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<Bean6> 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<Bean6> 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<String> values;
public List<String> getValues() {
return values;
}
public void setValues(List<String> values) {
this.values = values;
}
}
} }

View File

@ -1,13 +1,15 @@
package com.alibaba.fastjson2.writer; package com.alibaba.fastjson2.writer;
import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.util.TypeUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.function.ToIntFunction; import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction; import java.util.function.ToLongFunction;
import static com.alibaba.fastjson2.writer.ObjectWriters.fieldWriter; import static com.alibaba.fastjson2.writer.ObjectWriters.*;
import static com.alibaba.fastjson2.writer.ObjectWriters.objectWriter;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class ObjectWritersTest { public class ObjectWritersTest {
@ -114,4 +116,173 @@ public class ObjectWritersTest {
return id; return id;
} }
} }
@Test
public void test3() throws Exception {
ObjectWriter<Bean3> 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<Bean3> 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<Bean3> 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<String> names;
public List<String> getNames() {
return names;
}
public void setNames(List<String> names) {
this.names = names;
}
}
@Test
public void test4() throws Exception {
ObjectWriter<Bean4> 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<Long> names;
public List<Long> getNames() {
return names;
}
public void setNames(List<Long> names) {
this.names = names;
}
}
@Test
public void testFloat() throws Exception {
ObjectWriter<Bean5> 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<Bean6> 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<Bean7> 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<Bean7> 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;
}
}
} }

View File

@ -69,29 +69,29 @@ public class App {
private static void registerReaderAndWriter() { private static void registerReaderAndWriter() {
JSON.register(MediaContent.class, ObjectWriters.objectWriter( JSON.register(MediaContent.class, ObjectWriters.objectWriter(
MediaContent.class, MediaContent.class,
ObjectWriters.fieldWriter("media", Media.class, (MediaContent e) -> e.getMedia()), ObjectWriters.fieldWriter("media", Media.class, MediaContent::getMedia),
ObjectWriters.fieldWriterList("images", Image.class, (MediaContent e) -> e.getImages()) ObjectWriters.fieldWriterList("images", Image.class, MediaContent::getImages)
)); ));
JSON.register(MediaContent.class, ObjectReaders.of( JSON.register(MediaContent.class, ObjectReaders.of(
MediaContent::new, MediaContent::new,
fieldReader("media", Media.class, (MediaContent o, Media v) -> o.setMedia(v)), fieldReader("media", Media.class, MediaContent::setMedia),
fieldReaderList("images", Image.class, ArrayList::new, (MediaContent o, List<Image> v) -> o.setImages(v)) fieldReaderList("images", Image.class, ArrayList::new, MediaContent::setImages)
)); ));
JSON.register(Media.class, ObjectWriters.objectWriter( JSON.register(Media.class, ObjectWriters.objectWriter(
Media.class, Media.class,
ObjectWriters.fieldWriter("bitrate", (Media e) -> e.getBitrate()), ObjectWriters.fieldWriter("bitrate", Media::getBitrate),
ObjectWriters.fieldWriter("duration", (Media e) -> e.getDuration()), ObjectWriters.fieldWriter("duration", Media::getDuration),
ObjectWriters.fieldWriter("format", (Media e) -> e.getFormat()), ObjectWriters.fieldWriter("format", Media::getFormat),
ObjectWriters.fieldWriter("height", (Media e) -> e.getHeight()), ObjectWriters.fieldWriter("height", Media::getHeight),
ObjectWriters.fieldWriterList("persons", String.class, (Media e) -> e.getPersons()), ObjectWriters.fieldWriterList("persons", String.class, Media::getPersons),
ObjectWriters.fieldWriter("player", Player.class, (Media e) -> e.getPlayer()), ObjectWriters.fieldWriter("player", Player.class, Media::getPlayer),
ObjectWriters.fieldWriter("size", (Media e) -> e.getSize()), ObjectWriters.fieldWriter("size", Media::getSize),
ObjectWriters.fieldWriter("title", (Media e) -> e.getTitle()), ObjectWriters.fieldWriter("title", Media::getTitle),
ObjectWriters.fieldWriter("uri", (Media e) -> e.getUri()), ObjectWriters.fieldWriter("uri", Media::getUri),
ObjectWriters.fieldWriter("width", (Media e) -> e.getWidth()), ObjectWriters.fieldWriter("width", Media::getWidth),
ObjectWriters.fieldWriter("copyright", (Media e) -> e.getCopyright()) ObjectWriters.fieldWriter("copyright", Media::getCopyright)
)); ));
JSON.register(Media.class, ObjectReaders.of( JSON.register(Media.class, ObjectReaders.of(
@ -100,8 +100,8 @@ public class App {
fieldReaderLong("duration", Media::setDuration), fieldReaderLong("duration", Media::setDuration),
fieldReaderString("format", Media::setFormat), fieldReaderString("format", Media::setFormat),
fieldReaderInt("height", Media::setHeight), fieldReaderInt("height", Media::setHeight),
fieldReaderList("persons", String.class, ArrayList::new, (Media o, List<String> v) -> o.setPersons(v)), fieldReaderList("persons", String.class, ArrayList::new, Media::setPersons),
fieldReader("player", Player.class, (Media o, Player v) -> o.setPlayer(v)), fieldReader("player", Player.class, Media::setPlayer),
fieldReaderLong("size", Media::setSize), fieldReaderLong("size", Media::setSize),
fieldReaderString("title", Media::setTitle), fieldReaderString("title", Media::setTitle),
fieldReaderString("uri", Media::setUri), fieldReaderString("uri", Media::setUri),
@ -112,7 +112,7 @@ public class App {
JSON.register(Image.class, ObjectWriters.objectWriter( JSON.register(Image.class, ObjectWriters.objectWriter(
Image.class, Image.class,
ObjectWriters.fieldWriter("height", Image::getHeight), 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("title", Image::getTitle),
ObjectWriters.fieldWriter("uri", Image::getUri), ObjectWriters.fieldWriter("uri", Image::getUri),
ObjectWriters.fieldWriter("width", Image::getWidth) ObjectWriters.fieldWriter("width", Image::getWidth)
@ -121,9 +121,9 @@ public class App {
JSON.register(Image.class, ObjectReaders.of( JSON.register(Image.class, ObjectReaders.of(
Image::new, Image::new,
fieldReaderInt("height", Image::setHeight), fieldReaderInt("height", Image::setHeight),
fieldReader("size", Size.class, (Image o, Size v) -> o.setSize(v)), fieldReader("size", Size.class, Image::setSize),
fieldReader("title", String.class, (Image o, String v) -> o.setTitle(v)), fieldReaderString("title", Image::setTitle),
fieldReader("uri", String.class, (Image o, String v) -> o.setUri(v)), fieldReaderString("uri", Image::setUri),
fieldReaderInt("width", Image::setWidth) fieldReaderInt("width", Image::setWidth)
)); ));
} }