2017-04-12 4 views
0

Ich versuche, eine Reihe von Zahlen durch POST, die Rohdaten an den Server gesendet werden, abzurufen:Java Jersey erhalten POST Array

bucket2=0&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&buckets%5B%5D=6&bucket1=0&currPlayer=0&bucketID=0 

diese enthält ein Eimer Array = [6, 6, 6, ...], von der JavaScript-Konsole:

Object { bucket2: 0, buckets: Array[12], bucket1: 0, currPlayer: 0 } 

schreiben ich den folgenden Code verwenden:

$.ajax({ 
    type: "POST", 
    url: baseUrl + "move", 
    data: game, 
    success: function(data) { 
     // console.log(data); 
     update(data); 
    }, error: function(jqXHR, textStatus, errorThrown) { 
     console.log(errorThrown); 
    } 
}); 

Und meinen Server-Code ist:

@POST 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/move") 
public String move(@PathParam("currPlayer") int currPlayer, 
         @PathParam("bucket1") int bucket1, 
         @PathParam("bucket2") int bucket2, 
         @PathParam("buckets") List<Integer> buckets, 
         @PathParam("bucketID") int bucketID){ 

    System.out.println("currPlayer: " + currPlayer); 
    System.out.println("bucket1: " + bucket1); 
    System.out.println("bucket2: " + bucket2); 
    System.out.println("buckets: " + buckets); 
    System.out.println("bucketID: " + bucketID); 
    return ""; 
} 

Mit dem Server ausgegeben wird:

currPlayer: 0 
bucket1: 0 
bucket2: 0 
buckets: [] 
bucketID: 0 

Warum ist es nicht die Array-Werte erhalten?

EDIT: Ich habe versucht, @FormParam verwenden, bevor dieses Thema zu schaffen, aber es funktioniert immer noch nicht

Antwort

0

Sie verbrauchen:

@Consumes(MediaType.APPLICATION_FORM_URLENCODED) //Meaning the content-type is `application/x-www-form-urlencoded`. 

Und dennoch abrufen Sie die Parameter @PathParam verwenden. Für den Inhaltstyp application/x-www-form-urlencoded können Sie die Parameter mithilfe der Annotation @FormParam lesen.


Oh, Ihr HTTP Multi-Parameter-Wert Formular muss von der Form:

buckets=6&buckets=6 

Es besteht keine Notwendigkeit für %5B%5D vor dem Zeichen = ist.

Ich hoffe, das hilft.

+0

Ich habe versucht @ FormParam aber es funktioniert immer noch nicht – rj93

+0

@ rj93 überprüfen Sie meine aktualisierte Post. –

+0

jQuery kümmert sich um die Konvertierung, also nicht sicher, was man dagegen tun soll. Trotzdem danke. – rj93