2013-06-11 4 views
1

Je suis un débutant dans un Knockout.js et j'ai un problème avec l'envoi de données au serveur. Sur mon arrière-je REST service:Knockout.js envoie des données JSON étrangement formatées

@POST 
@Produces({MediaType.APPLICATION_JSON}) 
@Consumes({MediaType.APPLICATION_JSON}) 
@Path("/smth") 
public Response smth(MyObj[] values) { 
    return Response.ok().build(); 
} 

Où objet MyObj est:

@XmlRootElement 
public class MyObj { 

    @XmlAttribute 
    private String linkName; 
    @XmlAttribute 
    private String linkedIssueKey; 

    public MyObj (String linkName, String linkedKey) { 
     this.linkName = linkName; 
     this.linkedIssueKey = linkedKey; 
    } 

    public MyObj() { 
    } 

    public String getLinkName() { 
     return linkName; 
    } 

    public String getLinkedIssueKey() { 
     return linkedIssueKey; 
    } 

    public void setLinkedIssueKey(String linkedIssueKey) { 
     this.linkedIssueKey = linkedIssueKey; 
    } 

    public void setLinkName(String linkName) { 
     this.linkName = linkName; 
    } 

    @Override 
    public String toString() { 
     return "MyObj{" + 
       "linkName='" + linkName + '\'' + 
       ", linkedIssueKey='" + linkedIssueKey + '\'' + 
       '}'; 
    } 

Et le problème est que j'obtiens l'erreur 415 Type de non prise en charge des médias lors de l'envoi de données à l'aide de knock-out .js:

ko.utils.postJson("/smth", ko.toJSON(data)); 

données est définie de la manière suivante : ko.observableArray([]); Et peuplé d'objets Tâche:

function Task(data){ 
    this.linkName = ko.observable(data.linkName); 
    this.linkedIssueKey = ko.observable(data.linkedIssueKey).extend({ 
     required: true 
    }); 
} 

Et en regardant dans les données de formulaire dans une information d'en-tête, je vois que Knockout.js envoie des données d'une manière très bizarre (partie du formulaire de données a été omis, car il est trop long):

WTF

la question est comment puis-je résoudre ce problème et pourquoi cela se produit?

P.S. Le service REST back-end fonctionne correctement. Testé avec l'expéditeur de la demande REST en envoyant la demande suivante:

[{"linkName":"yo","linkedIssueKey":"zopa"}, 
{"linkName":"yo","linkedIssueKey":"zopa"}] 

Répondre

1

Le problème est que ko.utils.postJSON attend un tableau,

Il utilise la chaîne comme un indexeur. (Comme « Bonjour » [0] est « H »)

Essayez

ko.utils.postJson("/smth", [ko.toJSON(data)]); 
+0

Eh bien, maintenant au moins le formulaire de données est joli, mais je continue à avoir la même erreur. Je suppose que cela se produit parce que le Content-Type est text/html, mais devrait être: application/json –

Questions connexes