Ich benutze derzeit Jackson 2.1.4 und ich habe Probleme beim Ignorieren von Feldern, wenn ich ein Objekt in eine JSON-Zeichenfolge konvertieren.Jackson Serialisierung: leere Werte (oder null) ignorieren
Hier ist meine Klasse, die wirkt als das Objekt umgewandelt werden:
public class JsonOperation {
public static class Request {
@JsonInclude(Include.NON_EMPTY)
String requestType;
Data data = new Data();
public static class Data {
@JsonInclude(Include.NON_EMPTY)
String username;
String email;
String password;
String birthday;
String coinsPackage;
String coins;
String transactionId;
boolean isLoggedIn;
}
}
public static class Response {
@JsonInclude(Include.NON_EMPTY)
String requestType = null;
Data data = new Data();
public static class Data {
@JsonInclude(Include.NON_EMPTY)
enum ErrorCode { ERROR_INVALID_LOGIN, ERROR_USERNAME_ALREADY_TAKEN, ERROR_EMAIL_ALREADY_TAKEN };
enum Status { ok, error };
Status status;
ErrorCode errorCode;
String expiry;
int coins;
String email;
String birthday;
String pictureUrl;
ArrayList <Performer> performer;
}
}
}
Und hier ist, wie ich es konvertieren:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
JsonOperation subscribe = new JsonOperation();
subscribe.request.requestType = "login";
subscribe.request.data.username = "Vincent";
subscribe.request.data.password = "test";
Writer strWriter = new StringWriter();
try {
mapper.writeValue(strWriter, subscribe.request);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("JSON", strWriter.toString())
Hier ist der Ausgang:
{"data":{"birthday":null,"coins":null,"coinsPackage":null,"email":null,"username":"Vincent","password":"test","transactionId":null,"isLoggedIn":false},"requestType":"login"}
Wie kann Ich vermeide diese Nullwerte? Ich möchte nur die erforderlichen Informationen für den "Abonnement" Zweck nehmen!
Hier ist genau die Ausgabe, die ich suche:
{"data":{"username":"Vincent","password":"test"},"requestType":"login"}
Ich habe auch versucht @JsonInclude (Include.NON_NULL) und meine Variablen alle auf null gesetzt, aber es hat nicht funktioniert! Danke für eure Hilfe!
Es gibt wirklich keine Möglichkeit, die Include.NON_NULL Annotation zu arbeiten? Oder die NON_EMTPY? Weil ich weiß, welcher Null sein wird, aber es hängt von der Situation ab.Ich verwende dieselbe "JsonOperation" -Klasse für jedes Objekt, das ich serialisieren/deserialisieren möchte, und ich initialisiere nur die Variablen, die ich abhängig von der Situation verwenden muss. Ist dies ein guter Weg, um es zu tun, oder ich sollte mehrere Klassen nur mit den Variablen, die ich brauche, tun (so würde ich keine Annotation verwenden, da es nie eine Null/leere Variable geben wird) – Shinnyx
Ahhh Entschuldigung, ich Sieh dir an, was gerade passiert. Siehe meine bearbeitete Antwort. – drewmoore
Es funktioniert! Ich kann nicht glauben, dass das das Problem war ... Danke nochmal! – Shinnyx