Lombok的坑:VUE通过ajax.post请求向spring后台传参,部分属性接收不到。

一、问题:VUE通过ajax.post请求向spring后台传参,bAppId属性接收不到,其他的值均正常接收

 实体类定义:

VUE代码:

JAVA代码:


 

二、原因

实体类使用lombok.Data的@Data注解生成get/set,针对首字母小写,第二个字母大写的这种驼峰命名时,使用@Data注解生成的getter和setter方法分别是:

    public String getBAppId() {
        return bAppId;
    }

    public void setBAppId(String bAppId) {
        this.bAppId = bAppId;
    }

而Spring MVC 的默认 json 解析器就是 Jackson中解析对象的getter和setter方法应该是:

    public String getbAppId() {
        return bAppId;
    }

    public void setbAppId(String bAppId) {
        this.bAppId = bAppId;
    }

因此@RequestBody无法完成自动映射,才导致bAppId的取值为null。
一句话解释就是Lombook的@Data注解和Spring的Jackson对于get/set的生成方式不同,Jackson是setbAppId,Lombook是setBAppId,参数自动映射不到导致。

三、解决方法
1、重新bAppId的get/set方法
2、利用@JsonProperty(value = “bAppId”)注解,告诉Jackson在反序列化时给属性重新命名。

@JsonProperty

常用写法:@JsonProperty("xxx"),一般标记在字段上。指定入参和出参的字段名。

修改后的代码如下:

实体类:


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;

@ApiModel(value = "附件")
@Data
public class BaAttachFileEntityDto {

    @JsonProperty(value = "bAppId")
    @ApiModelProperty(value = "业务编号")
    @TableField(value = "bappid", exist = true)
    private String bAppId;

    @ApiModelProperty(value = "业务类型")
    @TableField(value = "type", exist = true)
    private String type;

    @ApiModelProperty(value = "文件名")
    @TableField(value = "filename", exist = true)
    private String fileName;

    @ApiModelProperty(value = "路径")
    @TableField(value = "filepath", exist = true)
    private String filepath;

}

VUE代码:


saveBaAttachfile(fileInfo) {
      console.log("dossiertransfer --- saveBa_attachfileData --- fileInfo", fileInfo)
      console.log("dossiertransfer --- saveBa_attachfileData --- this.bappid", this.bappid)
      let baAttachFileEntity = {
        type: '测试',
        bappidStr: this.bappid,
        bAppId: this.bappid,
        fileName: fileInfo.name,
        filepath: fileInfo.url
      }
      console.log("saveBaAttachfile--- baAttachFileEntity", baAttachFileEntity)
      axios({
        url: '/api/saveBaAttachFile',
        method: 'post',
        data: baAttachFileEntity
      }).then((res) => {
        this.$message({
          message: 'Ok,上传成功!',
          type: 'success'
        })
      })
    }

Spring代码:

    @PostMapping("saveBaAttachFile")
    @ApiOperation(value = "用于完成后的业务补录附件")
    public Result<Object> saveBaAttachFile(@RequestBody BaAttachFileEntityDto baAttachFileDto) {
        Result<Object> result = new Result<>();
        log.info("保存附件表数据,入参:{}", baAttachFileDto);
        return  dossierTransferService.saveBaAttachFile(baAttachFileDto);
    }

--------------------------------------------------------------文章结束-------------------------------------------------------

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值