私は Knockout.js の初心者で、サーバーへのデータ送信に問題があります。バックエンドには REST サービスがあります。
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
@Path("/smth")
public Response smth(MyObj[] values) {
return Response.ok().build();
}
MyObj オブジェクトの場所:
@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 + '\'' +
'}';
}
問題は、 Knockout.js を使用してデータを送信すると、エラー415 Unsupported Media Typeが発生することです。
ko.utils.postJson("/smth", ko.toJSON(data));
データは次のように定義されますko.observableArray([]);
。 Task オブジェクトが取り込まれます。
function Task(data){
this.linkName = ko.observable(data.linkName);
this.linkedIssueKey = ko.observable(data.linkedIssueKey).extend({
required: true
});
}
また、ヘッダー情報のフォーム データを調べると、Knockout.js が非常に奇妙な方法でデータを送信していることがわかります (フォーム データの一部は、長すぎるため省略されています)。
質問は、この問題をどのように解決でき、なぜこれが起こるのですか?
PS バックエンド REST サービスは正しく動作します。次のリクエストを送信して、REST リクエスト送信者でテスト済み:
[{"linkName":"yo","linkedIssueKey":"zopa"},
{"linkName":"yo","linkedIssueKey":"zopa"}]