【问题标题】:Knockout.js sends weirdly formatted JSON dataKnockout.js 发送格式怪异的 JSON 数据
【发布时间】:2023-04-02 17:09:01
【问题描述】:

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

data 定义如下:ko.observableArray([]); 并填充了 Task 对象:

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

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

问题是我该如何解决这个问题,为什么会这样?

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    试试

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

    【讨论】:

    • 好吧,现在至少表单数据看起来不错,但我一直收到同样的错误。我认为发生这种情况是因为 Content-Type 是 text/html,但应该是:application/json
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2015-08-06
    • 2017-03-30
    相关资源
    最近更新 更多