Wie kann ich das Serialisieren/Deserialisieren einen booleschen Wert aus FasterXML\Jackson als Int?
Schreibe ich eine JSON-Client für einen Server, gibt Boolean Werte als "0" und "1". Wenn ich versuche zu laufen, meine JSON-Client, den ich aktuell erhalten die folgende Ausnahme:
HttpMessageNotReadableException: Could not read JSON: Can not construct instance of java.lang.Boolean from String value '0': only "true" or "false" recognized
Also, wie kann ich setup FasterXML\Jackson richtig analysiert, so etwas wie:
{
"SomeServerType" : {
"ID" : "12345",
"ThisIsABoolean" : "0",
"ThisIsABooleanToo" : "1"
}
}
Probe Pojo ' s:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class myPojo
{
@JsonProperty("someServerType")
SomeServerType someServerType;
@JsonProperty("someServerType")
public SomeServerType getSomeServerType() { return someServerType; }
@JsonProperty("someServertype")
public void setSomeServerType(SomeServerType type)
{ someServerType = type; }
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class SomeServerType
{
@JsonProperty("ID")
Integer ID;
@JsonProperty("ThisIsABoolean")
Boolean bool;
@JsonProperty("ThisIsABooleanToo")
Boolean boolToo;
@JsonProperty("ID")
public Integer getID() { return ID; }
@JsonProperty("ID")
public void setID(Integer id)
{ ID = id; }
@JsonProperty("ThisIsABoolean")
public Boolean getThisIsABoolean() { return bool; }
@JsonProperty("ThisIsABoolean")
public void setThisIsABoolean(Boolean b) { bool = b; }
@JsonProperty("ThisIsABooleanToo")
public Boolean getThisIsABooleanToo() { return boolToo; }
@JsonProperty("ThisIsABooleanToo")
public void setThisIsABooleanToo(Boolean b) { boolToo = b; }
}
Rest-Client-Linie
Hinweis 1: Das ist mit Spring 3.2
Hinweis 2: toJSONString() - ein-Helfer-Methode, um mit Jackson zu Serialisieren meine Parameter-Objekt
Hinweis 3: Ausnahme geschieht auf Lesen IN das Ergebnis-Objekt
DocInfoResponse result = restTemplate.getForObject(docInfoURI.toString()
+ "/?input={input}",
DocInfoResponse.class,
toJSONString(params));
- Bitte fügen Sie Ihren Kunden die relevanten code.
- Sie können definieren, Getter-Methoden für diejenigen Werte, die Rückkehr so etwas wie
return "1".equals(stringRepresentation);
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Paulo Pedroso Antwort erwähnt und auf die verwiesen wird, müssen Sie Rollen Sie Ihre eigenen benutzerdefinierten
JsonSerializer
undJsonDeserializer
. Einmal erstellt, müssen Sie die@JsonSerialize
und@JsonDeserialize
Anmerkungen zu Ihrer Immobilie; die Angabe der Klasse, für jeden.Ich habe ein kleines (hoffentlich einfaches) Beispiel. Weder der serializer noch deserializer-Implementierungen sind super robust aber das sollte Ihnen den Einstieg.
Anstelle des benutzerdefinierten deserializer, können Sie auch einfach einen setter wie:
da Ihre Methode beanspruchen kann andere Art als das, was Sie intern verwenden.
Und wenn Sie die Unterstützung sowohl
Boolean
undString
können Sie angeben Wert ist einObject
, und prüfen, was Sie bekommen könnten.Sollte es sogar möglich sein, auf andere Art für getter-Methode (
Boolean
) und setter (String
oderObject
).@JsonCreator
annotierten Konstruktor und factory-Methoden zu wor, was das Wert ist (oder, äquivalent für Builder-Ansatz).