一文让你明白@RequestBody接收不到boolean值的原因

本文探讨了boolean和Boolean的区别,指出在容器使用场景、toString/valueOf转换和JPA中的选择。同时揭示了前后端开发中boolean参数接收问题的解决方案,通过@JsonProperty调整属性名。
摘要由CSDN通过智能技术生成

一、boolean和Boolean的区别和使用场景

  1. boolean是基本数据类型,Boolean是它的封装类,和其他类一样,有属性有方法。他们的关系其实是:Boolean 是boolean 的实例化对象类,和Integer对应int一样。
  2. 知道了他们的区别,那我们就可以知道该使用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才是属性名称,导致属性获取不到,进而产生抛出异常或者传参失败等情况。

三、解决办法

  1. @JsonProperty是作用在实体类的属性上的,把属性的名称序列化另一个名称,属性名称和@JsonProperty("")里面的名称是映射关系。比如数据库字段是"is_deleted",实体类属性名称是"isDeleted",这种情况,只需加上@JsonProperty("isDeleted")就能获取到Json的传参了
  2. 综上,解决办法是:
@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;
    }

@RequestBody 注解是 Spring Framework 中的一个注解,它用于将 HTTP 请求的请求体部分绑定到方法的参数上。在 Spring MVC 或 Spring Boot 应用程序中,通常用于处理 POST、PUT、PATCH 等请求方法中的 JSON 或表单数据。 以下是 @RequestBody 注解的源码: ```java package org.springframework.web.bind.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.http.MediaType; import java.lang.annotation.*; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestBody { @AliasFor("contentType") String value() default ""; @AliasFor("value") String contentType() default ""; boolean required() default true; Class<? extends HttpMessageConverter<?>>[] converters() default {}; Class<? extends Annotation>[] annotations() default {}; } ``` 这段源码定义了 @RequestBody 注解的属性和行为: - `value` 和 `contentType` 属性用于指定请求体的媒体类型。默认为空字符串,表示自动检测请求的媒体类型。 - `required` 属性用于指定请求体是否为必需,默认为 true。 - `converters` 属性用于指定用于将请求体转换为方法参数的对象的 HttpMessageConverter 实现类。默认为空数组,表示使用 Spring 的默认转换器。 - `annotations` 属性用于指定其他注解,以进一步自定义请求体的处理方式。 通过使用 @RequestBody 注解,我们可以将请求体的内容以 JSON 或表单数据的形式绑定到方法参数上,方便地进行数据的处理和转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值