簡體   English   中英

嘗試從角度插入數據到Spring Boot API時出現“ JSON解析錯誤:無法構造實例”錯誤

[英]“JSON parse error: Cannot construct instance of” error when trying to insert data from angular to spring boot api

我有一個角形式,我正在調用post方法來插入數據。但是由於出現這樣的錯誤,我無法插入數據:

"JSON parse error: Cannot construct instance of `com.ashwin.springsecurityangular.model.AuditorGroup` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('1'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.ashwin.springsecurityangular.model.AuditorGroup` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('1')
 at [Source: (PushbackInputStream); line: 1, column: 17] (through reference chain: com.ashwin.springsecurityangular.model.AssignmentAudit["auditorGroup"])"

通過角度形式作為AssignmentAudit的數據是:

在此處輸入圖片說明

我正在調用的api是:AssignmentAuditController:當我嘗試打印System.out.println(register.getAssignmentDate())我得到的輸出為“ null”。

@PostMapping(value = "/assignment-audit/create")
    public AssignmentAudit postCustomer(@RequestBody AssignmentAudit register) {
        System.out.println(register.getAssignmentDate());
        /*  Selection selection=selectionRepository.getOne(request.)*/
        System.out.println("entered assignment  audit");
        AssignmentAudit _rRegister = assignmentAuditRepository.save(new AssignmentAudit(register.getAuditorGroup(),register.getAssignmentDate(),register.getSelection(),register.getMagNo()));
        return _rRegister;
    }

AssignmentAudit.java

package com.ashwin.springsecurityangular.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Table(name = "assignmentaudit")
public class AssignmentAudit implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "auditorGroupId", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private AuditorGroup auditorGroup;

    @Column(name = "assignmentDate")
    private String assignmentDate;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "selectionId", nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Selection selection;

    @Column(name="mag_no")
    private int magNo;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public AssignmentAudit(AuditorGroup auditorGroup, String assignmentDate, Selection selection, int magNo) {

        this.auditorGroup = auditorGroup;
        this.assignmentDate = assignmentDate;
        this.selection = selection;
        this.magNo = magNo;
    }

    public AuditorGroup getAuditorGroup() {
        return auditorGroup;
    }

    public void setAuditorGroup(AuditorGroup auditorGroup) {
        this.auditorGroup = auditorGroup;
    }

    public Selection getSelection() {
        return selection;
    }

    public void setSelection(Selection selection) {
        this.selection = selection;
    }

    public int getMagNo() {
        return magNo;
    }

    public void setMagNo(int magNo) {
        this.magNo = magNo;
    }

    public String getAssignmentDate() {
        return assignmentDate;
    }

    public void setAssignmentDate(String assignmentDate) {
        this.assignmentDate = assignmentDate;
    }

    public AssignmentAudit() {

    }


    @Override
    public String toString() {
        return "AssignmentAudit [id=" + id + ", auditorGroup=" + auditorGroup + ", assignmentDate=" + assignmentDate
                + "]";
    }






}

AuditGroup.java

package com.ashwin.springsecurityangular.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "auditor_group")
public class AuditorGroup implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long auditorGroupId;

    @Column(name="group_desc")
    private String groupDesc;

    @Column(name="from_date")
    private String fromDate;

    @Column(name="to_date")
    private String toDate;

    public long getAuditorGroupId() {
        return auditorGroupId;
    }

    public void setAuditorGroupId(long auditorGroupId) {
        this.auditorGroupId = auditorGroupId;
    }

    public String getGroupDesc() {
        return groupDesc;
    }

    public void setGroupDesc(String groupDesc) {
        this.groupDesc = groupDesc;
    }

    public String getFromDate() {
        return fromDate;
    }

    public void setFromDate(String fromDate) {
        this.fromDate = fromDate;
    }

    public String getToDate() {
        return toDate;
    }

    public void setToDate(String toDate) {
        this.toDate = toDate;
    }

    public AuditorGroup() {

    }

    public AuditorGroup(String groupDesc, String fromDate, String toDate) {
        this.groupDesc = groupDesc;
        this.fromDate = fromDate;
        this.toDate = toDate;
    }



}

Selection.java

package com.ashwin.springsecurityangular.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GeneratorType;

@Entity
@Table(name="selection")
public class Selection implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long selectionId;

    @Column(name="selection_date")
    private String selectionDate;

    @Column(name="selected_by")
    private String selectedBy;

    @Column(name="pan_exim_number")
    private Long panEximNumber;

    @Column(name="name")
    private String name;

    @Column(name="address")
    private String address;

    @Column(name="phone_number")
    private String phoneNumber;

    @Column(name="selection_type")
    private String selectionType;

    @Column(name="consignment_no")
    private String consignentNo;

    @Column(name="consignment_date")
    private String consignentDate;


    @Column(name="selection_period_from_date")
    private String selectionPeriodFromDate;

    @Column(name="selection_period_to_date")
    private String selectionPeriodToDate;

    @Column(name="agent_no")
    private Long agentNo;

    @Column(name="custom_office")
    private String customOffice;

    @Column(name="auditor_group")
    private boolean auditorGroup=false;


    public Long getSelectionId() {
        return selectionId;
    }

    public void setSelectionId(Long selectionId) {
        this.selectionId = selectionId;
    }

    public String getSelectionDate() {
        return selectionDate;
    }

    public void setSelectionDate(String selectionDate) {
        this.selectionDate = selectionDate;
    }

    public String getSelectedBy() {
        return selectedBy;
    }

    public void setSelectedBy(String selectedBy) {
        this.selectedBy = selectedBy;
    }

    public Long getPanEximNumber() {
        return panEximNumber;
    }

    public void setPanEximNumber(Long panEximNumber) {
        this.panEximNumber = panEximNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getSelectionType() {
        return selectionType;
    }

    public void setSelectionType(String selectionType) {
        this.selectionType = selectionType;
    }

    public String getConsignentNo() {
        return consignentNo;
    }

    public void setConsignentNo(String consignentNo) {
        this.consignentNo = consignentNo;
    }

    public String getConsignentDate() {
        return consignentDate;
    }

    public void setConsignentDate(String consignentDate) {
        this.consignentDate = consignentDate;
    }


    public String getSelectionPeriodFromDate() {
        return selectionPeriodFromDate;
    }

    public void setSelectionPeriodFromDate(String selectionPeriodFromDate) {
        this.selectionPeriodFromDate = selectionPeriodFromDate;
    }

    public String getSelectionPeriodToDate() {
        return selectionPeriodToDate;
    }

    public void setSelectionPeriodToDate(String selectionPeriodToDate) {
        this.selectionPeriodToDate = selectionPeriodToDate;
    }

    public Long getAgentNo() {
        return agentNo;
    }

    public void setAgentNo(Long agentNo) {
        this.agentNo = agentNo;
    }

    public String getCustomOffice() {
        return customOffice;
    }

    public void setCustomOffice(String customOffice) {
        this.customOffice = customOffice;
    }

    public Selection() {

    }

    @Override
    public String toString() {
        return "Selection [selectionId=" + selectionId + ", selectionDate=" + selectionDate + ", selectedBy="
                + selectedBy + ", panEximNumber=" + panEximNumber + ", name=" + name + ", address=" + address
                + ", phoneNumber=" + phoneNumber + ", selectionType=" + selectionType + ", consignentNo=" + consignentNo
                + ", consignentDate=" + consignentDate + ", selectionPeriodFromDate=" + selectionPeriodFromDate
                + ", selectionPeriodToDate=" + selectionPeriodToDate + ", agentNo=" + agentNo + ", customOffice="
                + customOffice + "]";
    }

    public boolean isAuditorGroup() {
        return auditorGroup;
    }

    public void setAuditorGroup(boolean auditorGroup) {
        this.auditorGroup = auditorGroup;
    }









}

Angular文件現在:assignmentaudit.ts

export class AssignmentAudit {
    id: number;
    auditorGroup: number;
    assignmentDate: string;
    selectionNumber: number;
}

角度審計形式

<form name="form" #f="ngForm" (ngSubmit)="f.form.valid &&  onSubmit()" novalidate class="">
          <div class="form-group row">
            <div class="col-md-6">
              <label for="auditorGroup">Auditor Group</label>
              <select class="form-control" id="auditorGroup" required [(ngModel)]="assignmentAudit.auditorGroup" name="auditorGroup"
                #auditorGroup="ngModel"
                [ngClass]="{ 'is-invalid': f.submitted && auditorGroup.invalid }"
                required
                >
                <option *ngFor="let title of auditorgroups" [value]="title.auditorGroupId">{{title.groupDesc}}</option>

              </select>
              <div *ngIf="f.submitted && auditorGroup.invalid" class="invalid-input">
                <div *ngIf="auditorGroup.errors?.required">Auditor Group is required</div>
              </div>
            </div>
            <div class="col-md-6">
              <div class="form-group">
                <label for="assignmentDate">Assignment Date</label>
                <input type="date" id="assignmentDate"  class="form-control" name="assignmentDate" placeholder="Please enter the Asignment Date" [(ngModel)]="assignmentAudit.assignmentDate" #assignmentDate="ngModel"
                [ngClass]="{ 'is-invalid': f.submitted && assignmentDate.invalid }"
                required />
                <div *ngIf="f.submitted && assignmentDate.invalid" class="invalid-input">
                  <div *ngIf="assignmentDate.errors?.required">Assignment Date is required</div>
                </div>
              </div>
            </div>
          </div>


          <button type="submit" style="margin-bottom: 50px;" class="btn btn-success pull-right">Submit</button>
        </form>

我的表格如下:

在此處輸入圖片說明

我從component.ts文件中調用服務類的方法是

this.assignmentAuditService.createRegister(this.assignmentAudit).subscribe(data => console.log(data), error => console.log(error));

Assignment-audit.service類來調用api:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})

export class AssignmentAuditService {

    private baseUrl = 'http://localhost:8080/api/assignment-audit';

    constructor(private http: HttpClient) { }

    createRegister(assignmentAudit: Object): Observable<Object> {
    return this.http.post(`${this.baseUrl}` + `/create`, assignmentAudit);
  }

}

assignmentaudit.ts屬性

id: number;
auditorGroup: number;
assignmentDate: string;
selectionNumber: number;

它與包含屬性的@RequestBody AssignmentAudit register映射的對象要求不匹配,

private long id;
private AuditorGroup auditorGroup;
private String assignmentDate;
private Selection selection;
private int magNo;

這里的auditorGroupselection是對象,但是您將一個無效的字符串傳遞給auditorGroup 多數民眾贊成在例外。

要么你需要改變assignmentaudit.ts根據AssignmentAudit.class或者創建擁有請求體新對象的匹配,並把它代替@RequestBody AssignmentAudit register 會的。

將數據綁定對象auditorGroup綁定到本地類型存在問題。 您只需要更改選擇框的ngModel

<select class="form-control" id="auditorGroup" required [(ngModel)]="assignmentAudit.auditorGroup.auditorGroupId" name="auditorGroup"
                #auditorGroup="ngModel"
                [ngClass]="{ 'is-invalid': f.submitted && auditorGroup.invalid }"
                required
                >
                <option *ngFor="let title of auditorgroups" [value]="title.auditorGroupId">{{title.groupDesc}}</option>

              </select>

注意:不要忘記初始化assignmentAudit對象的auditorGroup ,否則您將得到undefined錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM