2016-11-21 1 views
2

Ich habe einen JSON, die mehr oder weniger wie folgt aussieht:Wie eine große Zeichenfolge/json mit AJAX auf Play-Framework 1.4.x schreiben

{"id":"id","date":"date","csvdata":"csvdata".....}

wo CSVData Eigenschaft in eine große Menge an Daten JSON-Format auch. Ich habe versucht, diesen JSON mit AJAX in Play POST! Framework 1.4.x, also sendete ich einfach so, aber wenn ich die Daten auf der Serverseite erhalte, sieht das csvdata wie [Objekt Objekt] aus und speichert es in meiner Datenbank.

Mein erster Gedanke, diese zu lösen war die CSVData json im String-Format zu senden, wie ein Long zu speichern, aber wenn ich versuche, dies zu tun, meine Anfrage schlägt mit dem folgenden Fehler:

413 (Request Entity Too Large)

Und Konsole zeigen Spiel mir diese Nachricht:

Number of request parameters 3623 is higher than maximum of 1000, aborting. Can be configured using 'http.maxParams'

ich habe auch versucht http.maxParams = 5000 in application.conf aber das einzige Ergebnis ist, dass Konsole Spiel hinzuzufügen sagt nichts ein d in meiner Datenbank wird dieses Feld als Null gespeichert.

Kann mir jemand helfen oder vielleicht eine andere Lösung für mein Problem vorschlagen?

Vielen Dank im Voraus.

+0

Können Sie den Inhalt des 'cvsdata'-Felds in Ihrem Controller mit' http.maxParams = 5000' überprüfen? –

+0

Hallo @ RémiLavolée Ich habe es mit JPDA auf Eclipse überprüft. Mit http.maxParams = 5000 erhält mein Controller nichts, eine Null-Zeichenfolge, aber in der Konsole habe ich keine Fehlermeldung. –

+0

Ok. Wir müssen wissen, woher das Problem kommt. Haben Sie versucht, eine Light-Version von 'csvdata' zu senden? Wie deserialisieren Sie den JSON-Inhalt im Controller? –

Antwort

0

Ist es möglich, dass Sie "csvdata" als Array und nicht als String gesendet haben? Jedes Element im Array wäre ein separater Parameter. Ich habe 100KB Zeichenfolgen mit AJAX gesendet und nicht in die http.maxParams Grenze. Sie können den Inhalt des Anfragetexts mit den Entwicklertools Ihres Browsers überprüfen.

Wenn Ihr csvdata als eine Datei auf dem Client-Computer stammt, dann ist der einfachste Weg, es als Datei zu senden. Ihre Controller-Aktion würde folgendermaßen aussehen:

public static void upload(String id, Date date, File csv) { 
    ... 
} 

Beim Abspielen! bindet einen Parameter an den Dateityp und schreibt den Inhalt des Parameters in eine temporäre Datei, die Sie einlesen können. (Dadurch wird verhindert, dass beim Hochladen einer großen Datei nicht genügend Arbeitsspeicher zur Verfügung steht.) Der Dateityp "Datei" wurde für ein normales Formular entworfen Übermitteln, aber ich habe es in AJAX verwendet, als der Browser einige HTML5-Funktionen (Datei-API und Formulardaten) unterstützt.

Verwandte Themen