【问题标题】:Boolean checkbox in Spring MVC + ajaxSpring MVC + ajax 中的布尔复选框
【发布时间】:2018-11-08 23:12:17
【问题描述】:

我的 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"/>

当我通过 Ajax 向控制器发送 Json 字符串时,浏览器中的网络流量会显示以下表单数据:

_includesPnr: on

在我的控制器中,我使用 Jackson 将 json 反序列化回我的 java 模型,但由于下划线无法映射 _includesPnr 属性而失败。如果我像这样手动映射属性

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

它仍然失败,因为 'on' 不是布尔值。

我必须做什么才能发送具有正确名称和真/假而不是开/关的属性?

【问题讨论】:

    标签: javascript json ajax spring-mvc jackson


    【解决方案1】:

    试试这个@JsonProperty注解: JSON field mapping for Java model

    然后使用自定义反序列化器将“on”转换为“true”

    在你的情况下:

    @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;
       }
    }
    

    (代码未经测试)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2015-09-25
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多