powraca Server takich częścią json:Cofnięcie json do klas
{"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"
}
}
]
}
]
}}
pisałem następny hierarchię klas:
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) {
}
}
Dodałem kolejne jackson adnotacji w nadziei deserializować json powyżej:
@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=""),
})
Oznakowałem odpowiednich konstruktorów jako @JsonCreator
.
To nie działa dla klasy Expression
.
Gdybym modyfikować json że każdy wyrażenie obiekt ma nazwę "ekspresja":
"expression" : {
"operand": "a",
"operator": "==",
"value": "true"
}
i
@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"),
})
To nie próbując analizować "nie" warunek mówiąc, że "nie można utworzyć instancji klasy abstrakcyjnej, potrzebuję więcej informacji o typie". Wygląda na to, że traci deklarację adnotacji w głębszej analizie.
- Zastanawiam się, czy to możliwe, aby napisać deserializacji z jackson do oryginalnego json
- Dlaczego Drugie podejście nie działa
Not
deserializacji
byłoby pomocne, jeśli pisał rzeczywistą hierarchię klas - powyższy kod nie wygląda to skompilować –
kod zmodyfikowane do kodu Java. Pełne źródło znajduje się tutaj: https://github.com/emartynov/spil-games-assignment/tree/master/service-core/src/main/java/com/spilgames/core/condition –
Popraw wiersze: __Not implementacja warunku__ do __Not implementacji warunku__ __public klasa i() extends__ do __public klasy i extends__ __public class lub() extends__ do __public klasy lub extends__ – Visruth