"Нераспознанное поле" Джексона - PullRequest
0 голосов
/ 28 августа 2011

Я пытаюсь десериализовать объект JSON из этого кода JSON:

{ 
    "bg" : { 
        "fileName" : "data/gui/mainMenuBg.jpg"
    },
    "startGameBtn" : { 
        "text" : "Start Game",
        "innerWidth" : 100,
        "innerHeight" : 50
    }
}

Объект, который я десериализирую, выглядит просто так:

public class MainMenu extends BasicTWLGameState {
    private StateBasedGame app;

    @JsonProperty private Image bg;
    @JsonProperty private Button startGameBtn;
    // [...]
}

Я создал дополнение для базового класса Button:

public abstract class WidgetMixIn {
    // Not sure why I have to ignore only this when there are other setters that it should complain about...
    @JsonIgnore public abstract boolean setBorderSize(Border border);

    @JsonProperty("innerWidth") public abstract int getInnerWidth();
    @JsonProperty("innerHeight") public abstract int getInnerHeight();

    public abstract void setInnerSize(
            @JsonProperty("innerWidth") int width,
            @JsonProperty("innerHeight") int height);
}

Миксин для самого класса Button:

public class ButtonMixIn {
    @JsonProperty public String text;
}

Я получаю ошибку:

ERROR:Unrecognized field "innerWidth" (Class de.matthiasmann.twl.Button), not marked as ignorable
    at [Source: data\gui\mainMenu.json; line: 7, column: 27] (through reference chain: state.MainMenu["startGameBtn"]->de.matthiasmann.twl.Button["innerWidth"])

Почему он не может найти свойство innerWidth, определенное в микшировании Widget?

Приветствие.

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Проблема в вашем "setInnerSize ()" - установщики свойств Java-бина позволяют устанавливать только одно свойство одновременно; несколько свойств могут использоваться только с аннотированными конструкторами. Таким образом, вам нужно разделить это на два отдельных сеттера.

Для чего бы то ни было, существует запрос на усовершенствование функции, позволяющий Джексону использовать установщики с несколькими аргументами, но в текущих версиях это пока не поддерживается.

0 голосов
/ 28 августа 2011

Класс ButtonMixIn не имеет аннотации JSONProperty innerHeight и innerWidth.

Если класс ButtonMixIn предназначен для расширения из определенного вами абстрактного класса кнопок, то вам не хватает ButtonMixIn, расширяющего строку WidgetMixIn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...