Nach meinem Verständnis von @Until Annotation in der Dokumentation definiert, unterstützt es alle Version bis zur Version enthalten in der Anmerkung.@Unter Annotation in Gson funktioniert nicht wie erwartet
Docs:
public class User {
private String firstName;
private String lastName;
@Until(1.1) private String emailAddress;
@Until(1.1) private String password;
}
wenn Sie Gson mit Gson Gson = new GsonBuilder() setVersion (1.2) .Create() erstellt dann die toJson() und fromJson() Methoden. von Gson wird die Felder emailaddress und password aus dem obigen Beispiel ausschließen, da die Versionsnummer, die an der GsonBuilder, 1.2 übergeben wird, die Versionsnummer überschreitet, die für diese Felder in der Annotation Until festgelegt ist.
Also, wenn mein Gson mit Version 1.1 gebaut wurde, sollte es alle 4 Felder der Klasse anzeigen. Dies ist jedoch nicht der Fall.
meine Klasse:
class TestData {
private String firstName;
@Since(1.1)
private String middleName;
@Until(1.1)
private String lastName;
}
Testcode:
TestData testData = new TestData();
testData.setFirstName("first");
testData.setMiddleName("middle");
testData.setLastName("last");
Gson versionGson = new GsonBuilder().setPrettyPrinting().setVersion(1.1).create();
System.out.println(versionGson.toJson(testData));
Ausgang:
{
"firstName": "first",
"middleName": "middle"
}
lastName
ist mis sing in der Ausgabe, obwohl der Annotation-Wert der Gson-Version entspricht.
Weitere Debugging Ich fand this unter gson Code, der dieses Verhalten verursacht hat. Natürlich, nach Code, obwohl meine Annotation-Version mit der Version übereinstimmt, die an Gson übergeben wurde, gilt sie immer noch als ungültig.
private boolean isValidUntil(Until annotation) {
if (annotation != null) {
double annotationVersion = annotation.value();
if (annotationVersion <= version) {
return false;
}
}
return true;
}
Ist der Doc, Code oder mein Verständnis falsch?
Wo ist das Feld 'someName'? – CKing
@CKing Es ist nicht da.Ich entfernte unnötige Felder aus dem POJO beim Einfügen, editierte die Frage mit dem gleichen. –