Skip to content

Instantly share code, notes, and snippets.

@kabir
Last active April 11, 2019 17:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kabir/f81299a4b60601d0fd9bbfd41e3631b9 to your computer and use it in GitHub Desktop.
Save kabir/f81299a4b60601d0fd9bbfd41e3631b9 to your computer and use it in GitHub Desktop.
@JsonbTypeSerializer(Organisation.MySerializer.class)
public class Organisation {
private String name;
private List<Admin> admins = new ArrayList<>();
private List<Admin> siteAdmins = new ArrayList<>();
public Organisation() {
}
public Organisation(String name) {
this.name = name;
this.admins.add(new Admin("kabir", "KK"));
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Admin> getAdmins() {
return admins;
}
public void setAdmins(List<Admin> admins) {
this.admins = admins;
}
public List<Admin> getSiteAdmins() {
// return null;
throw new LazyInitializationException("b");
}
public void setSiteAdmins(List<Admin> siteAdmins) {
this.siteAdmins = siteAdmins;
}
public static abstract class AbstractSerializer<T> implements JsonbSerializer<T> {
private final Map<String, Function<T, ?>> suppliers;
protected AbstractSerializer(Map<String, Function<T, ?>> suppliers) {
this.suppliers = suppliers;
}
@Override
public final void serialize(T t, JsonGenerator generator, SerializationContext ctx) {
if (t != null) {
generator.writeStartObject();
for (Map.Entry<String, Function<T, ?>> entry : suppliers.entrySet()) {
try {
Object value = entry.getValue().apply(t);
if (value != null) {
ctx.serialize(entry.getKey(), value, generator);
}
} catch (LazyInitializationException ignore) {
}
}
generator.writeEnd();
} else {
ctx.serialize(null, generator);
}
}
}
public static class MySerializer extends AbstractSerializer<Organisation> {
Map<String, Supplier<?>> x = new HashMap<>();
public MySerializer() {
super(
MapBuilder.<String, Function<Organisation, ?>>linkedHashMap()
.put("name", org -> org.getName())
.put("admins", org -> org.getAdmins())
.put("siteAdmins", org -> org.getSiteAdmins())
.build()
);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment