2017-11-27 1 views
0

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 
    } 
+0

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

+0

hinzugefügt, danke – besmart

+0

Sie könnten Browser-Entwickler-Tools verwenden und überprüfen, was die Json-Payload an den Server gesendet. – Maddy

Antwort

0

Ich glaube, Sie die JsonObject

$('#requestForm').submit(function(e){ 
    e.preventDefault(); 

    $.ajax({ 
     url: '/admin/reservation/save', 
     type: 'POST', 
     dataType:'json', 
     data: JSON.stringify(reservation), 
     success: function(response){ 
      console.log(response) 
     }, 
     failure: function (response){ 
      console.log(response) 
     } 
    }) 
}) 
+0

Stringing das ist richtig, wenn Sie auch hinzufügen, dass ich @ModelAttribute aus dem Controller entfernen sollte ich kann es akzeptieren – besmart

+0

Kein Problem, das ist mein antworte und werde wahrscheinlich anderen helfen. Beste! – Ele

Verwandte Themen