Knockout.js发送奇怪格式的JSON数据

时间:2013-06-11 17:11:33

标签: javascript json post knockout.js http-status-code-415

我是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
    });
} 

通过查看Header信息中的Form Data,我发现Knockout.js以非常奇怪的方式发送数据(Form Data的一部分已被省略,因为它太长了):

WTF

问题是如何解决这个问题以及为什么会这样?

P.S。后端REST服务正常工作。通过发送以下请求与REST请求发送方进行测试:

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

1 个答案:

答案 0 :(得分:1)

问题是ko.utils.postJSON需要一个数组,

它使用字符串作为索引器。 (如“Hello”[0]为“H”)

尝试

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