大家好,我正在嘗試從相關表中保存一些發布資料。城市和大廳。這是我的城市模型
package com.example.model;
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 = "cities")
public class Cities {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
這是我的霍爾模型:
package com.example.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
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 java.util.Date;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "halls")
public class Halls {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "placeqty")
private int placeqty;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler","ignoreUnknown = true"})
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "cityid", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
private Cities cityid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPlaceqty() {
return placeqty;
}
public void setPlaceqty(int placeqty) {
this.placeqty = placeqty;
}
public Cities getCityid() {
return cityid;
}
public void setCityid(Cities cityid) {
this.cityid = cityid;
}
}
它與 cityid 列與城市模型相關。這是我在 Spring Boot 中創建新大廳的控制器方法:
@RequestMapping(value="/add", method=RequestMethod.POST)
public ResponseEntity add(@RequestBody Halls hall)
{
hallsService.addHall(hall);
return new ResponseEntity<>(hall, HttpStatus.CREATED);
}
還有我的 Angular 形式:
<p>Добавить зал</p>
<div>
<div class="submit-form">
<div *ngIf="!submitted">
<div class="form-group">
<label for="title">Название</label>
<input
type="text"
class="form-control"
id="title"
required
[(ngModel)]="hall.name"
name="name"
/>
</div>
<div class="form-group">
<label for="placeqty">кол-во мест</label>
<input
type="text"
class="form-control"
id="placeqty"
required
[(ngModel)]="hall.placeqty"
name="placeqty"
/>
</div>
<select [(ngModel)]="hall.cityid" name="cityid">
<option *ngFor="let c of cities" value="{{c.id}}">{{c.name}}</option>
</select>`
<button (click)="saveHall()" class="btn btn-success">Сохранить</button>
</div>
<div *ngIf="submitted">
<h4>Зал добавлен!</h4>
<button class="btn btn-success" (click)="newHall()">Добавить еще</button>
</div>
</div>
</div>
我的組件如下所示:
import { Component, OnInit } from '@angular/core';
import { Hall } from 'src/app/models/hall.model';
import { City } from 'src/app/models/city.model';
import { HallService } from 'src/app/services/hall.service';
import { CityService } from 'src/app/services/city.service';
@Component({
selector: 'app-add-hall',
templateUrl: './add-hall.component.html',
styleUrls: ['./add-hall.component.css']
})
export class AddHallComponent implements OnInit {
cities?: City[];
// @ts-ignore
hall: Hall = {
name: '',
placeqty:'',
cityid:this.retrieveCities(),
};
submitted = false;
constructor(private hallService:HallService,private cityService:CityService) { }
ngOnInit(): void {
}
saveHall(): void {
const data = {
name: this.hall.name,
placeqty: this.hall.placeqty,
cityid: this.hall.cityid
};
console.log(data.cityid);
this.hallService.create(data)
.subscribe(
response => {
console.log("city")
console.log(response);
this.submitted = true;
},
error => {
console.log(error);
});
}
newHall(): void {
this.submitted = false;
this.hall = {
name: '',
placeqty: '',
cityid: this.retrieveCities()
};
}
retrieveCities(): any {
this.cityService.getAll()
.subscribe(
data => {
this.cities = data;
console.log(data);
return data;
},
error => {
console.log(error);
return error;
});
}
}
還有我的霍爾模型:
import {City} from "./city.model";
export class Hall {
id?:any;
name?:string;
placeqty?:string;
cityid?:City;
}
因此,在發布此表單后,我收到以下錯誤:
2021-11-01 11:34:10.236 WARN 14120 --- [io-8888-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.example.model.Cities` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('2'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.example.model.Cities` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('2')
at [Source: (PushbackInputStream); line: 1, column: 43] (through reference chain: com.example.model.Halls["cityid"])]
在這種情況下我做錯了什么?
將從 Java 和 Angular 添加我的城市模型
爪哇:
package com.example.model;
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 = "cities")
public class Cities {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
和它的角度部分:
export class City {
id?:any;
name?:string;
}
我必須在哪里轉換它?這是我的帖子有效載荷:
name: "test", placeqty: "100", cityid: "2"}
cityid: "2"
name: "test"
placeqty: "
我也嘗試使用 ngvalue 而不是一個值:
<select [(ngModel)]="hall.cityid" name="cityid">
<option *ngFor="let c of cities" [ngValue]='c.id'>{{c.name}}</option>
</select>
沒有運氣。
uj5u.com熱心網友回復:
com.example.model.Halls["cityid"])]
“沒有字串引數建構式/工廠方法從字串值('2')反序列化”
問題出在您的 JSON 中,您可能將 ID 作為字串發送。確保該欄位是一個數字。
uj5u.com熱心網友回復:
最后我把它修好了。我用這種方式編輯了帶有城市的選擇框:
<select [(ngModel)]="hall.cityid" name="cityid">
<option *ngFor="let city of cities" [ngValue]="city">{{city.name}}</option>
</select>
它解決了這個問題。
uj5u.com熱心網友回復:
您需要添加一個 all argumenet 承包商。或者您可以使用來自 Lombok 的 @AllArgsConstructor 或 @Data。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343776.html
