一文让你明白@RequestBody接收不到boolean值的原因
一、boolean和Boolean的区别和使用场景boolean是基本数据类型,Boolean是它的封装类,和其他类一样,有属性有方法。他们的关系其实是:Boolean 是boolean 的实例化对象类,和Integer对应int一样。知道了他们的区别,那我们就可以知道该使用boolean还是Boolean了,第一个就是我们在使用容器内需要装布尔值的时候,这时候我们别无选择,只能使用Boolean
·
一、boolean和Boolean的区别和使用场景
- boolean是基本数据类型,Boolean是它的封装类,和其他类一样,有属性有方法。他们的关系其实是:Boolean 是boolean 的实例化对象类,和Integer对应int一样。
- 知道了他们的区别,那我们就可以知道该使用boolean还是Boolean了,第一个就是我们在使用容器内需要装布尔值的时候,这时候我们别无选择,只能使用Boolean类。其次,当我们需要用到toString()和valueOf()方法与String相互转换的场景应该使用Boolean类。比如,
Boolean.valueOf(target);
来转换成Boolean对象。
3.除此之外,在使用JPA(Java Persistence API)的过程中还是觉得使用boolean更有优势,因为我们只需要进行true/false的标记,就直接用boolean即可。
二、用boolean时接收不到前端参数
在使用前后端分离开发中,往往用Json传参是最高效的方式之一,但是我们可能遇到接收不到boolean类型(默认值是false)的参数。
这种情况其实是因为我们定义boolean参数的时候加了“is”,比如
private boolean isDeleted;
它的方法也是isDeleted(),RPC框架在反向解析的时候,会误判deleted才是属性名称,导致属性获取不到,进而产生抛出异常或者传参失败等情况。
三、解决办法
- @JsonProperty是作用在实体类的属性上的,把属性的名称序列化另一个名称,属性名称和@JsonProperty("")里面的名称是映射关系。比如数据库字段是"is_deleted",实体类属性名称是"isDeleted",这种情况,只需加上@JsonProperty("isDeleted")就能获取到Json的传参了
- 综上,解决办法是:
@JsonProperty("isDeleted")
private boolean isDeleted;
或
@JsonProperty(value = "is_deleted")
public boolean isDeleted() {
return deleted;
}
@JsonProperty(value = "is_deleted")
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
更多推荐
已为社区贡献1条内容
所有评论(0)