Skip to content

Commit 9925769

Browse files
committed
Deprecated AbstractMapper, made empty objects and arrays shorter, actually respecting the transient keyword, omitting null fields by default and added options to disable this feature
1 parent 8099092 commit 9925769

File tree

6 files changed

+42
-5
lines changed

6 files changed

+42
-5
lines changed

src/main/java/org/javawebstack/abstractdata/AbstractMapper.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,39 @@
22

33
import org.javawebstack.abstractdata.mapper.Mapper;
44

5+
@Deprecated
56
public class AbstractMapper {
67

78
private final Mapper mapper = new Mapper();
89
private NamingPolicy namingPolicy = NamingPolicy.NONE;
910
private String dateFormat = "yyyy-MM-dd HH:mm:ss";
10-
private boolean exposeRequired = false;
1111

1212
public AbstractMapper setNamingPolicy(NamingPolicy namingPolicy) {
1313
this.namingPolicy = namingPolicy;
1414
mapper.namingPolicy(namingPolicy.getMapperPolicy());
1515
return this;
1616
}
1717

18+
public boolean shouldOmitNull() {
19+
return mapper.shouldOmitNull();
20+
}
21+
22+
public AbstractMapper setOmitNull(boolean omitNull) {
23+
this.mapper.omitNull(omitNull);
24+
return this;
25+
}
26+
1827
public NamingPolicy getNamingPolicy() {
1928
return namingPolicy;
2029
}
2130

2231
public AbstractMapper setExposeRequired(boolean exposeRequired) {
23-
this.exposeRequired = exposeRequired;
2432
mapper.requireExpose(exposeRequired);
2533
return this;
2634
}
2735

2836
public boolean isExposeRequired() {
29-
return exposeRequired;
37+
return mapper.isExposeRequired();
3038
}
3139

3240
public AbstractMapper setDateFormat(String dateFormat) {

src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ private List<String> dumpLines(AbstractElement element) {
3939
return Collections.singletonList("\"" + escape(element.string()) + "\"");
4040
if(element.isObject()) {
4141
List<String> lines =new ArrayList<>();
42+
if(element.object().size() == 0) {
43+
lines.add("{}");
44+
return lines;
45+
}
4246
if(pretty) {
4347
lines.add("{");
4448
List<String> keys = new ArrayList<>(element.object().keys());
@@ -59,6 +63,10 @@ private List<String> dumpLines(AbstractElement element) {
5963
}
6064
if(element.isArray()) {
6165
List<String> lines =new ArrayList<>();
66+
if(element.array().size() == 0) {
67+
lines.add("[]");
68+
return lines;
69+
}
6270
if(pretty) {
6371
lines.add("[");
6472
AbstractArray array = element.array();

src/main/java/org/javawebstack/abstractdata/mapper/DefaultMappers.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ public AbstractElement toAbstract(MapperContext context, Object value) throws Ma
276276
if(context.getMapper().isExposeRequired() ? !fs.isExpose() : fs.isHidden())
277277
continue;
278278
String k = fs.getName() != null ? fs.getName() : context.getMapper().getNamingPolicy().toAbstract(fs.getField().getName());
279-
object.set(k, context.getMapper().map(new MapperContext(context.getMapper(), fs.getField(), fs.getAnnotations()).adapter(fs.getAdapter()), fs.getField().get(value)));
279+
AbstractElement e = context.getMapper().map(new MapperContext(context.getMapper(), fs.getField(), fs.getAnnotations()).adapter(fs.getAdapter()), fs.getField().get(value));
280+
if(e.isNull() && context.getMapper().shouldOmitNull() && fs.shouldOmitNull())
281+
continue;
282+
object.set(k, e);
280283
}
281284
if(spec.getAdditionalField() != null) {
282285
AbstractObject additional = (AbstractObject) spec.getAdditionalField().get(value);

src/main/java/org/javawebstack/abstractdata/mapper/Mapper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class Mapper {
2020
private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2121
private NamingPolicy namingPolicy = NamingPolicy.NONE;
2222
private boolean exposeRequired;
23+
private boolean omitNull = true;
2324
private final Map<Class<?>, MapperTypeAdapter> adapters = DefaultMappers.create();
2425
private final MapperContext emptyContext = new MapperContext(this, null, new HashMap<>());
2526

@@ -74,6 +75,15 @@ public DateFormat getDateFormat() {
7475
return dateFormat;
7576
}
7677

78+
public boolean shouldOmitNull() {
79+
return omitNull;
80+
}
81+
82+
public Mapper omitNull(boolean omitNull) {
83+
this.omitNull = omitNull;
84+
return this;
85+
}
86+
7787
public Mapper namingPolicy(NamingPolicy namingPolicy) {
7888
this.namingPolicy = namingPolicy;
7989
return this;

src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeSpec.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,10 @@ private void checkoutField(Field field) throws MapperException {
8686
}
8787
spec.order = options.order();
8888
spec.expose = options.expose();
89-
spec.hidden = options.hidden() || Modifier.isTransient(field.getModifiers());
89+
spec.hidden = options.hidden();
90+
spec.omitNull = options.omitNull();
9091
}
92+
spec.hidden = spec.hidden || Modifier.isTransient(field.getModifiers());
9193
}
9294

9395
public Class<?> getType() {
@@ -111,6 +113,7 @@ public static class FieldSpec {
111113
private int order;
112114
private boolean expose;
113115
private boolean hidden;
116+
private boolean omitNull = true;
114117
private MapperTypeAdapter adapter;
115118
private Map<Class<? extends Annotation>, List<Annotation>> annotations = new HashMap<>();
116119

@@ -135,6 +138,10 @@ public boolean isHidden() {
135138
return hidden;
136139
}
137140

141+
public boolean shouldOmitNull() {
142+
return omitNull;
143+
}
144+
138145
public MapperTypeAdapter getAdapter() {
139146
return adapter;
140147
}

src/main/java/org/javawebstack/abstractdata/mapper/annotation/MapperOptions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
Class<?>[] generic() default {};
1717
boolean expose() default false;
1818
boolean hidden() default false;
19+
boolean omitNull() default true;
1920
Class<? extends MapperTypeAdapter> adapter() default MapperTypeAdapter.class;
2021

2122
}

0 commit comments

Comments
 (0)