我有一个网络应用程序。前端是ember.js,后端是Java,Spring MVC。我面临一个非常奇怪的问题。
我向后端发出ajax请求并获取一些数据。我返回一个自定义对象。
当我从本地计算机上的后端获取数据时,一切正常,但在本地服务器上,自定义对象会排除Boolean
个字段。 (像String这样的休息字段很好)。
在我的自定义对象的类中,我在这些@JsonProperty
变量的getter和setter上设置了Boolean
注释。
在我的javascript文件中,我通过GET
与contentType: "application/json"
这是控制器:
@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":{}}
答案 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 >}
对二传手进行相同的修正。