2016-05-24 12 views
0

Ich versuche, eine Ajax-Post-Anfrage zu schreiben, die eine Spring-Controller-Methode trifft und einige Anforderungs-Parameter liefert, von denen ein Array von JavaScript-Objekten ist: vendorBillingDetails. Diese JavaScript-Objekte haben eine passende Jaava-Domain-Klasse und ich möchte sie dieser Domain-Klasse zuordnen. Dies scheint etwas zu sein, was Spring MVC können sollte, aber bisher konnte ich nur Beispiele finden, die ein HTML-Formular mit nur einem Request-Parameter verwenden.Veröffentlichen eines Arrays von JavaScript-Objekten und Zuordnung zu Java-Domäne in Spring Controller Methode

Unten ist mein Controller und Ajax-Anfrage. Hoffentlich kann mir jemand sagen, wie man das richtig abbildet, da alles, was ich bisher versucht habe, gescheitert ist.

$.ajax({ 
    url : '/ui/clearBilling', 
    type : 'POST', 
    data : { "trackId": trackId, "vendorBillingDetails": vendorBillingDetails, "_csrf": csrf }, 
    async : true, 
    success : function(data) { 
      jqAlert("Selected item(s) were cleared"); 
    }, 
    fail: function(e) { 
     jqAlert("There was an error with the request"); 
    } 
}); 

});

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST) 
public @ResponseBody String setClearVendorBillingPO(@RequestParam BigInteger trackId, @RequestParam(value = "vendorBillingDetails[]") List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) { 

    //TODO stuff 

} 

Antwort

1

Ich habe etwas Ähnliches getan, aber mit nur einem JSON-Objekt zu senden, so dass Sie zwicken müssen oder es in ein anderes Objekt zu wickeln, daß alle Parameter Anfrage hält sich um dich kümmern. Verwenden Sie die @RequestBody-Annotation.

@RequestMapping(value = "/clearBilling", method = RequestMethod.POST) 
public @ResponseBody String setClearVendorBillingPO(@RequestBody List<VendorBillingDetail> vendorBillingDetails, HttpServletRequest request) { 

//TODO stuff 

} 

In der Ajax-Aufruf können Sie JSON.stringify() (Teil json2.js)

$.ajax({ 
     url : "/ui/clearBilling", 
     type : "POST", 
     async : true, 
     data : JSON.stringify(vendorBillingDetails), 
     contentType : "application/json" 
    }); 
+0

Funktioniert das auch mit meiner anderen TrackId als Eingabeparameter? – user2725919

+0

Es sollte funktionieren, wenn Sie ein Wrapper-Objekt erstellen, das die TrackId und VendorBillingDetails enthält. – bhietpas

+0

Ich kann jedoch nicht sicher über die einzelnen Params sagen. Ich müsste mich ändern und meine testen. – bhietpas

0

Diese verwenden funktioniert nicht. Irgendwie endet RequestMapping auf einem Array von Objekten als Fehler am empfangenden Ende des Controllers. Es kann am besten sein, das Senden als JSON-Körper zu versuchen und dann im Federregler zu entmaren.

Verwandte Themen