我的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;不是布尔值。
如何使用正确的名称和真/假而非开/关发送属性我该怎么办?
答案 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;
}
}
(代码未经测试)