Spring控制器从响应中排除布尔变量

时间:2017-09-12 21:52:00

标签: javascript java ajax spring ember.js

我有一个网络应用程序。前端是ember.js,后端是Java,Spring MVC。我面临一个非常奇怪的问题。

我向后端发出ajax请求并获取一些数据。我返回一个自定义对象。

当我从本地计算机上的后端获取数据时,一切正常,但在本地服务器上,自定义对象会排除Boolean个字段。 (像String这样的休息字段很好)。

在我的自定义对象的类中,我在这些@JsonProperty变量的getter和setter上设置了Boolean注释。

在我的javascript文件中,我通过GETcontentType: "application/json"

在ajax请求中发送一些参数

这是控制器:

@ResponseBody
@RequestMapping(value = "/getData", method = RequestMethod.GET,
                        produces = MediaType.APPLICATION_JSON_VALUE)
public MyCustomObject(@RequestParam(value = "name") String name) {
    MyCustomObject obj = null;
    if(name != null) {
        obj = fetchDataByName(name);
        // obj.getInList() = false and obj.getIsParent() = false
        // Values were properly initialized
    }

    return null;
}

我100%确定服务器和本地环境中的代码是相同的,并且在发送自定义对象之前数据具有这些布尔变量。

我无法弄清楚这里可能出现的问题,我是否错过了一些配置?或者还有其他什么?

更新:

public class MyCustomObject {
    private ID id;
    private Name name;
    private InList inList;
    private IsParent isParent;  

    @JsonProperty
    public ID getID() { return this.id;}

    @JsonProperty
    public void setID(ID id) { this.id = id;}

    @JsonProperty
    public Name getName() { return this.name;}

    @JsonProperty
    public void setName(Name name) { this.name = name;}

    @JsonProperty
    public InList getInList() { return this.inList;}

    @JsonProperty
    public void setInList(InList inList) { this.inList = inList;}

    @JsonProperty
    public IsParent getIsParent() { return this.isParent;}

    @JsonProperty
    public void setIsParent(IsParent isParent) { this.isParent = isParent;}
}

public class ID {
    String data;

    @JsonProperty
    public String getData() { return this.data;}

    @JsonProperty
    public void setData(String data) { this.data = data;}
}

public class Name {
    String data;

    @JsonProperty
    public String getData() { return this.data;}

    @JsonProperty
    public void setData(String data) { this.data = data;}
}

public class InList {
    Boolean data;

    @JsonProperty
    public Boolean getData() { return this.data;}

    @JsonProperty
    public void setData(Boolean data) { this.data = data;}
}

public class IsParent {
    Boolean data;

    @JsonProperty
    public Boolean getData() { return this.data;}

    @JsonProperty
    public void setData(Boolean data) { this.data = data;}
}

但我通过浏览器或我的应用程序通过GET电话从ajax请求中收到了什么:

{"ID":{"data":"123"},"Name":{"data":"MyName"},"InList":{},"IsParent":{}}

2 个答案:

答案 0 :(得分:0)

您可能错误地为布尔值定义了getters / setter。

对于原始类型和其他对象,Spring使用get {VariableName}的约定,但是对于布尔值,格式是不同的。一个例子如下:

boolean active;

public boolean isActive(){
  return active;
}

public void setActive(boolean active){
  this.active = active;
}

请在此处查看相关问题:For a boolean field, what is the naming convention for its getter/setter?

答案 1 :(得分:0)

在MyCustomObject类的InList和IsParent的get方法中,您没有创建任何要返回的对象,只返回它。但是这个。在创建MyCustomObject的对象时,使用null初始化。 看看更正:

@JsonProperty
public IsParent getIsParent() { return <object IsParent >}

... 

@JsonProperty
public InList getInList() { return <object InList >}

对二传手进行相同的修正。