Булевский флажок в Spring MVC + ajax - PullRequest
0 голосов
/ 30 мая 2018

У меня на странице html установлен логический флажок, например:

<input type="checkbox" id="pnrCheckbox" name="includesPnr" value="true"/>
<!-- this field is autogenerated by spring as a workaround for something -->
<input type="hidden" name="_includesPnr" value="on"/>

Когда я отправляю строку Json через Ajax на мой контроллер, сетевой трафик в моем браузере показывает данные этой формы:

_includesPnr: on

В моем контроллере я использую Джексона, чтобы десериализовать json обратно в мою модель java, что не удается, поскольку он не может отобразить свойство _includePnr из-за подчеркивания.Если я вручную сопоставлю свойство, как это

@JsonProperty(value="_includesPnr")
private Boolean includesPnr;

, оно все равно не будет выполнено, потому что «on» не является логическим значением.

Что мне нужно сделать, чтобы отправить свойство с правильным именем и значением true / false вместо включения / выключения?

1 Ответ

0 голосов
/ 30 мая 2018

Попробуйте это для аннотации @JsonProperty: Отображение полей JSON для модели Java

Затем используйте специальный десериализатор для преобразования "on" в "true"

Inваш случай:

@JsonProperty("_includesPnr")
@JsonDeserialize(using = CustomBooleanDeserializer.class)
private Boolean includesPnr;

Затем для CustomBooleanDeserializer (ссылка: http://tutorials.jenkov.com/java-json/jackson-annotations.html)

public class CustomBooleanDeserializer extends JsonDeserializer<Boolean> {

   @Override
   public Boolean deserialize(JsonParser jsonParser,
        DeserializationContext deserializationContext) throws
    IOException, JsonProcessingException {
       return ("on".equals(jsonParser.getText())) ? true : false;
   }
}

(код не проверен)

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