rendimenti Server, ad una parte di JSON:Deserialize JSON per classi
{"condition": {
"or": [
{
"and": [
{
"operand": "a",
"operator": "==",
"value": "true"
},
{
"not": {
"operand": "b",
"operator": "==",
"value": "true"
}
}
]
},
{
"and": [
{
"operand": "b",
"operator": "==",
"value": "true"
},
{
"not": {
"operand": "a",
"operator": "==",
"value": "true"
}
}
]
}
]
}}
ho scritto classi prossimo gerarchia:
public interface Condition {}
public class Expression implements Condition {
public Expression(String operator, String operand, String value) {
}
}
public class Not implements Condition {
public Not(Condition condition) {
}
}
public abstract class GroupOperation implements Condition {
public GroupOperation (List<Condition> conditions) {
}
}
public class And extends GroupOperation {
public And(List<Condition> conditions) {
}
}
public class Or extends GroupOperation {
public Or(List<Condition> conditions) {
}
}
Ho aggiunto prossimi Jackson annotazioni in speranza deserializzare json sopra:
@JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value=Not.class, name="not"),
@JsonSubTypes.Type(value=And.class, name="and"),
@JsonSubTypes.Type(value=Or.class, name="or"),
@JsonSubTypes.Type(value=Expression.class, name=""),
})
Ho contrassegnato i costruttori appropriati come @JsonCreator
.
Questo non funziona per la classe Expression
.
Se modifico JSON che ogni espressione oggetto ha nome "espressione":
"expression" : {
"operand": "a",
"operator": "==",
"value": "true"
}
e
@JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value=Not.class, name="not"),
@JsonSubTypes.Type(value=And.class, name="and"),
@JsonSubTypes.Type(value=Or.class, name="or"),
@JsonSubTypes.Type(value=Expression.class, name="expression"),
})
Non riesce quando si cerca di analizzare "non" condizione dicendo che "non è possibile istanziare una classe astratta per avere più informazioni sul tipo". Quindi sembra che perde la dichiarazione delle annotazioni in analisi più approfondite.
- Mi chiedo se è possibile scrivere deserializzazione con Jackson per originale JSON
- Perché secondo approccio non funziona per
Not
deserializzazione
sarebbe utile se hai postato la gerarchia classe reale - il codice di cui sopra non sembra che sarebbe compilare –
Codice modificato per essere codice Java. La fonte completa è qui: https://github.com/emartynov/spil-games-assignment/tree/master/service-core/src/main/java/com/spilgames/core/condition –
Linee corrette di thess: __Non implementa Condition__ a __Not implementa Condition__ __public class E() estende __public class E extends__ __public class Or() ext__ a __public class O extends__ – Visruth