Kann nicht eine grundlegende Jackson Mixin zu arbeiten
Ich war das Experimentieren mit Jackson 2.0 Mixins in Verbindung zu serialisieren einer Klasse mit keine Anmerkungen.
Vereinfachte Source-code unten. Beachten Sie, dass ich nicht mit Getter/setter, aber es schien, wie kann ich das noch verwenden Mixins in Verbindung nach einigen ziemlich skizzenhafte Dokumentation.
public class NoAnnotation {
private Date created;
private String name;
private int id;
private List<URL> urls = new ArrayList();
//make one with some data in it for the test
static NoAnnotation make() {
NoAnnotation na= new NoAnnotation();
na.created = new Date();
na.name = "FooBear";
na.id = 23456;
try {
na.urls.add(new URL("http://www.eclipse.org/eclipselink/moxy.php"));
na.urls.add(new URL("http://jaxb.java.net"));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
return na;
}
//my Mixin "Class"
static class JacksonMixIn {
JacksonMixIn(@JsonProperty("created") Date created,
@JsonProperty("name") String name,
@JsonProperty("id") int id,
@JsonProperty("urls") List<URL> urls)
{ /* do nothing */ }
}
//test code
public static void main(String[] args) throws Exception {
NoAnnotation na = NoAnnotation.make();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixInAnnotations(NoAnnotation.class, JacksonMixIn.class);
String jsonText = objectMapper.writeValueAsString(na);
System.out.println(jsonText);
}
}
Wenn ich laufen Hauptsache ich bekomme
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.flyingspaniel.so.NoAnnotation and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:51)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:25)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:108)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2407)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:1983)
at com.flyingspaniel.so.NoAnnotation.main(NoAnnotation.java:49)
Ich vermute, dass ich das weglassen eines basic "setThis" Schritt irgendwo, aber weiß nicht was. Danke!
EDIT: Wenn ich Folgen Sie den Anweisungen in der Ausnahme und fügen Sie eine Zeile
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
Ich bekomme nicht mehr eine Ausnahme, aber das Ergebnis ist eine leere JSON-String, "{}".
EDIT2: Wenn ich die Felder, die öffentlichkeit, das es funktioniert, aber das ist keine vernünftige Objekt-design.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, verwenden Sie die annotation-mix in der richtigen Weise zu erklären ist:
in dieser Weise können Sie Steuern, die Felder zu serialisieren einfach mit/ohne Sie aus den mix-in.
Habe ich es herausgefunden. Wenn Sie möchten, um Zugriff auf private Felder, die Sie brauchen, um zu spielen mit der Sichtbarkeit, indem Sie die folgende Zeile hinzufügen:
Für geschützte Felder, Sie können auch
Visibility.PROTECTED_AND_PUBLIC