1

私は 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"}]
4

1 に答える 1