使用PUT方法传递参数

时间:2013-08-03 10:19:57

标签: google-app-engine google-cloud-endpoints

我使用以下方法定义了一个端点:

@ApiMethod(name = "update", path = "properties/{id}", httpMethod = HttpMethod.PUT)
public void update(@Named("id") Long id, RealEstatePropertyAPI propertyAPI,
        User user) {

在客户端,我尝试了几次调用,但没有一个调用服务器端的propertyAPI对象。创建的实例的所有字段都设置为null,但id除外。

        var jsonId = { 'id': '11'};
        var x = {"name": "Test","address": { "street": "White House"}};
        gapi.client.realestate.update(jsonId, x).execute(function(resp) {
            console.log('PropertyEdited');
            console.log(resp);
        });

或者

        var jsonId = { 'id': '11'};
        var x = {"name": "Test","address": { "street": "White House"}};
        gapi.client.realestate.update(jsonId, {'resource' : x}).execute(function(resp) {
            console.log('PropertyEdited');
            console.log(resp);
        });

Java类:

public class RealEstatePropertyAPI {

    private Long id;
    private String name;
    private AddressAPI address;

    public RealEstatePropertyAPI() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public AddressAPI getAddress() {
        return address;
    }

    public void setAddress(AddressAPI address) {
        this.address = address;
    }

}

public class AddressAPI {

    private Long id;
    private String street;
    private String city;
    private String state;
    private String zip;
    private String country;

    public AddressAPI() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

}

1 个答案:

答案 0 :(得分:0)

我对此并不确定,但您可以尝试在单个对象中传递所有参数,我的意思是用括号{ }包装参数,如下所示:

//var jsonId = { 'id': '11'};
var x = {"name": "Test","address": { "street": "White House"}};
gapi.client.realestate.update({'id': '11', 'resource' : x}).execute(function(resp) {
    console.log('PropertyEdited');
    console.log(resp);
});

因为实际上在你的两个请求中你都发送了2个对象...
我认为你必须使用'resource'作为POST数据中的参数,就像你的第二个选项一样......