一開始我的物體類中沒有默認建構式。最終發現 JPA 在物體類中需要一個默認建構式,所以我做了一個。
添加默認建構式后,即使在發布請求期間,JPA 也會繼續呼叫默認建構式,這會導致屬性初始化不正確。例如,如果您看到名為availableSeats的屬性,它會被初始化為 100,但在發布請求期間,只會呼叫默認建構式,這會導致將availableSeats初始化為 0。
這非常奇怪,我不明白我在這里做錯了什么。
@Entity
public class Flight {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotBlank(message = "Airline Name cannot be blank!")
private String airlineName;
@NotBlank(message = "From-Location cannot be blank!")
private String fromLocation;
@NotBlank(message = "To-Location cannot be blank!")
private String toLocation;
@NotBlank(message = "Airport Gate Number cannot be blank")
private String gateNumber;
// @NotBlank(message = "Boarding time cannot be blank")
private ZonedDateTime dateTimeZone;
private static final int INITIAL_SEAT_CAPACITY = 100;
private int availableSeats;
// constructor should not be able to set id
public Flight(Long id, String airlineName, String fromLocation, String toLocation, String gateNumber, ZonedDateTime dateTimeZone, int availableSeats) {
this.id = id;
this.airlineName = airlineName;
this.fromLocation = fromLocation;
this.toLocation = toLocation;
this.gateNumber = gateNumber;
this.dateTimeZone = dateTimeZone;
// setting up initial number of available seats
this.availableSeats = INITIAL_SEAT_CAPACITY;
}
public Flight(){
}
// getters and setters
}
還在這里添加 FlightController.java 代碼
@RestController
@RequestMapping("/api/flights")
public class FlightController {
@Autowired
FlightService flightService;
@GetMapping(value = "/")
public ResponseEntity<List<Flight>> getAllFlights(){
return flightService.getAllFlights();
}
@PostMapping(value = "/")
public ResponseEntity<String> createFlight(@Valid @RequestBody Flight flight){
return flightService.createFlight(flight);
}
@GetMapping(value = "/{id}")
public ResponseEntity<Flight> getFlightById(@PathVariable Long id){
return flightService.getFlightById(id);
}
@DeleteMapping(value = "/{id}")
public ResponseEntity<String> deleteFlight(@PathVariable Long id){
return flightService.deleteFlight(id);
}
}
uj5u.com熱心網友回復:
Spring 的控制器使用默認(零引數)建構式來創建物件,然后使用它的 setter 方法來設定物件中的值。您不能期望 spring 使用引數化建構式。因此,如果您需要設定一些默認值,請在零引數建構式中進行。
uj5u.com熱心網友回復:
正如@grigouille 在評論中指出的那樣,JPA 僅使用默認建構式。因此,availableSeats 也應該在默認建構式中初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/513215.html
