Java8 SpringBoot 2.1.9.RELEASE
JSON senden: {" id ":" 1 "," name ":" Name "}
/**
*Schreiben Sie mit Getter
*/
public class Sample {
String id;
String name;
public String getId() {
return id;
}
public String getName() {
return name;
}
}
/**
*Schreiben Sie in den Konstruktor
*/
public class Sample {
String id;
String name;
public Sample(String id, String name) {
this.id = id;
this.name = name;
}
}
JSON senden: {" id ": 1," age ": 20}
/**
*Schreiben Sie mit Getter
*/
public class Sample {
int id;
int age;
public int getId() {
return id;
}
public int getAge() {
return age;
}
}
/**
*Schreiben Sie in den Konstruktor
*/
public class Sample {
int id;
int age;
public Sample(int id, int age) {
this.id = id;
this.age = age;
}
}
Übrigens, wenn Sie den Integer-Typ verwenden, können Sie null (Wut) tolerieren.
{"id": null, "age": 20}
public class Sample {
Integer id;
int age;
public Sample(Integer id, int age) {
this.id = id;
this.age = age;
}
}
Ergebnis: IntSample {id = null, age = 20}
__Getter konnte nicht implementiert werden __
Also nur wie man im Konstruktor schreibt
JSON senden: {" isHoge ": true," isFuga ": true}
/**
*Schreiben Sie in den Konstruktor
*/
public class BooleanSample {
boolean isHoge;
boolean isFuga;
public BooleanSample(boolean isHoge, boolean isFuga) {
this.isHoge = isHoge;
this.isFuga = isFuga;
}
}
Für den Booleschen Typ ist es "null", wenn keine Deserialisierung möglich ist.
Ich habe es als String, int und boolean überprüft, aber es scheint, dass der Konstruktor erforderlich ist, wenn der boolean gemischt wird, so dass ich nicht überlegen kann, wie ich es mit Getter
schreiben soll. Daher scheint es, dass nur der Konstruktor definiert werden kann.
Ich habe es mit Getter versucht
JSON senden: {" name ":" Kiguri "," age ": 24," isPerson ": true}
/**
*Schreiben Sie mit Getter
*/
public class Sample {
String name;
int age;
boolean isPerson;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean isPerson() {
return isPerson;
}
}
Ergebnis: Sample {name = 'Kiguri', age = 24, isPerson = false}
Der Wert von Boolean ist nicht gebunden, was ein sehr enttäuschendes Ergebnis ist ...
/**
*Schreiben Sie in den Konstruktor
*/
public class Sample {
String name;
int age;
boolean isPerson;
public Sample(String name, int age, boolean isPerson) {
this.name = name;
this.age = age;
this.isPerson = isPerson;
}
}
Ergebnis: SIBSample {name = 'Kiguri', age = 24, isPerson = true}
Ich lächle.
Haben Sie bemerkt, dass der Beispielcode bisher zwei gemeinsame Felddefinitionen erstellt hat? Wenn es nur eine Felddefinition gibt und diese vom Konstruktor deserialisiert wird, unterscheidet sie sich von der ursprünglichen Verwendung. Wenn Sie jedoch nicht "@ JsonCreator" und "@ JsonProperty" verwenden, wird eine Ausnahme angezeigt.
JSON senden: {" name ":" Kiguri "}
public class Sample {
String name;
public Sample(String name) {
this.name = name;
}
}
{
"timestamp": "2019-10-11T03:25:50.724+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot construct instance of `sandbox.Sample` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `sandbox.Sample` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)\n at [Source: (PushbackInputStream); line: 1, column: 2]",
"path": "/s"
}
JSON senden: {" name ":" Kiguri "}
public class Sample {
String name;
@JsonCreator
public Sample(@JsonProperty("name") String name) {
this.name = name;
}
}
Ich frage mich, ob es ein Titelbetrug sein wird, der Jackson vollständig erklärt hat. Bitte sagen Sie mir auch, wer mit dem Fallenteil vertraut ist. Möglicherweise werden Sie gefragt: "Ist es nicht in Ordnung, dem Feld" @ JsonProperty "hinzuzufügen, ohne einen Konstruktor zu verwenden?" Ich werde. Auf der Suche nach einem besseren Weg !! !!
Recommended Posts