首页 > 解决方案 > 为什么角度在spring boot api中的日期变量中发送空值

问题描述

我正在将表单数据从 Angular 发送到 Spring Boot 以保存在 MySQL 中。

表单很少有带文本的字段,一个字段是日期(输入类型=日期)=>引导

比尔模型

    export class Bill{
          billno:string
          date:Date
          vendorname:string
          amount:number
          description:string
} 

用于向弹簧发送数据的 Angular 服务

onSubmit(){

  this.addBillForm.markAllAsTouched();
  if(this.addBillForm.invalid){
    console.log("Form is Invalid");
    return false;
  }
  this.datasaveService.addbill(this.addBillForm.value)
  .subscribe(
    res=>{
      console.log("Response : "+res);
    });
}



  addbill(bill:Bill):Observable<any>{
    return this.http.post<Bill>(this.addbillurl,bill);
  }

账单实体类:

@Entity
@Table(name="bill_details") 
public class Bills {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="bill_id")
    private int bill_id;
    
    @Column(name="bill_no")
    private String billno;
    
    @Temporal(value=TemporalType.DATE)
    @Column(name="bill_date")
    private Date billdate;
    
    @Column(name="bill_amt")
    private int amount;
    
    @Column(name="bill_description")
    private String description;
    
    @Column(name="vendor_id")
    private long vendor_id;
    
    public Bills() {
    
    }

    public Bills(String billno, Date billdate, int amount, String description, long vendor_id) {
        super();
        this.billno = billno;
        this.billdate = billdate;
        this.amount = amount;
        this.description = description;
        this.vendor_id = vendor_id;
    }

    public String getBillno() {
        return billno;
    }

    public void setBillno(String billno) {
        this.billno = billno;
    }

    public Date getBilldate() {
        return billdate;
    }

    public void setBilldate(Date billdate) {
        this.billdate = billdate;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public long getBill_id() {
        return bill_id;
    }
    

    public void setBill_id(int bill_id) {
        this.bill_id = bill_id;
    }

    public long getVendor_id() {
        return vendor_id;
    }

    @Override
    public String toString() {
        return "Bills [bill_id=" + bill_id + ", billno=" + billno + ", billdate=" + billdate + ", amount=" + amount
                + ", description=" + description + ", vendor_id=" + vendor_id + "]";
    }
    
    
    

}

Spring Controller(仅因为服务和存储库正确而证明控制器)

   @PostMapping("/addbill")
    public Bills addBill(@RequestBody Bills thebill ) {
        System.out.println("Date : "+thebill.getBilldate());
        thebill.setBill_id(0);
        thebillservice.save(thebill);
        return thebill;
    }

在请求正文中收到打印帐单对象时:

账单对象:账单 [bill_id=0, billno=100, billdate=null, amount=5000, description=Buy Books, vendor_id=0]

运行后我收到以下错误消息:

java.sql.SQLIntegrityConstraintViolationException:列'bill_date'不能为空

账单实体中的账单日期列是 Date 类型。

同样的方式我正在保存运行良好的供应商数据,但唯一的问题是没有要保存的日期。

有人可以帮助我为什么我得到日期属性的空值。

标签: angularspringspring-boot

解决方案


您的实体包含一个字段

billdate

但是您通过 Angular 发送的文档包含一个名为

date

那么Spring应该如何做两者之间的映射呢?您可以更改 Angular 以将字段发送为

billdate 

或者您在服务器上添加一个映射,该映射读取具有名称的字段

date 

推荐阅读