Spring MVC + ajax中的布尔复选框

时间:2018-05-30 07:35:43

标签: javascript json ajax spring-mvc jackson

我的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;

它仍然失败,因为&#39; on&#39;不是布尔值。

如何使用正确的名称和真/假而非开/关发送属性我该怎么办?

1 个答案:

答案 0 :(得分:0)

尝试使用@JsonProperty注释: JSON field mapping for Java model

然后使用自定义反序列化器转换&#34; on&#34; to&#34; true&#34;

在你的情况下:

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

(代码未经测试)