Ich möchte Formulardaten mit jQuery an einen Spring Boot Controller senden, weil ich sie validieren muss, aber ich kann nicht verstehen, wie Objekte übergeben werden.jQuery form + Spring - sende ein ModelAttribute
Ich habe dieses Objekt
public class ReservationConfirmDTO {
private long reservationId;
private Vehicle vehicle;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd/MM/yyyy HH:mm")
@JsonSerialize(using = CustomDateSerializer.class)
@NotNull
private Date fromDate;
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd/MM/yyyy HH:mm")
@JsonSerialize(using = CustomDateSerializer.class)
private Date toDate;
@JsonView(Views.FewDetails.MediumDetails.class)
private Address startAddress;
@JsonView(Views.FewDetails.MediumDetails.class)
private Address endAddress;
private VehicleBrand brand;
private List<Service> services;
//getters and setters
Und ich habe diese Art der Steuerung
@PostMapping("/save")
public @ResponseBody String saveAdminReservation(@Valid @ModelAttribute("reservation") ReservationConfirmDTO wrapper, @RequestParam long userId, @RequestParam(required=false) String list,
RedirectAttributes redirectAttributes, ModelMap model, WebRequest request) {
//logic inside
}
Also, versuche ich in meiner Ansicht nach in meinem Controller überprüft werden, um ein reservation
Objekt zu bauen
reservation.vehicle = response.vehicle; //from a previous POST response
reservation.fromDate = $('#fromDate').val();
reservation.toDate = $('#toDate').val();
var startAddress = {addressId: $('#startAddressSelector option:selected').val()};
var endAddress = {
addressId: $('#endAddressSelector option:selected').val()
}
var brand = {
brandId : $('#brandSelector option:selected').val()
}
reservation.startAddress = startAddress;
reservation.endAddress = endAddress;
reservation.brand = brand;
Auf diese Weise habe ich zum Beispiel eine StartAddress, die nur addressId Feld hat d
Dann versuche ich die Reservierung an die Steuerung zu übergeben
$('#requestForm').submit(function(e){
e.preventDefault();
$.ajax({
url: '/admin/reservation/save',
type: 'POST',
dataType:'json',
data:reservation,
success: function(response){
console.log(response)
},
failure: function (response){
console.log(response)
}
})
})
aber ich bekomme einen 500-Fehler
Ungültige Eigenschaft 'Marke [brandid]' der Bean-Klasse [it.besmart.eshare.dto.ReservationConfirmDTO]: Property referenced in indexed property path 'brand[brandId]' is neither an array nor a List nor a Map; returned value was [VehicleBrand [brandId=0, brandName=null, description=null]]
Diese passiert auch für startAddress und EndAddress
VehicleBrand ist
public class VehicleBrand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long brandId;
private String brandName;
private String description;
//getters and setters
}
Springboot stringify brauchen versucht, die Nutzlast in eine ReservationConfirmDTO Objekt serialisiert werden, konnte aber das Attribut brand.brandId finden. Teilen Sie den Code von VehicleBrand Bean. – Ele
hinzugefügt, danke – besmart
Sie könnten Browser-Entwickler-Tools verwenden und überprüfen, was die Json-Payload an den Server gesendet. – Maddy