服务器端是这样的
public class Instrument {
private String myPropOne;
private String myPropTwo;
private String myPropThree;
public String getMyPropOne() {
return myPropOne;
}
public void setMyPropOne(String myPropOne) {
this.myPropOne = myPropOne;
}
public String getMyPropTwo() {
return myPropTwo;
}
public void setMyPropTwo(String myPropTwo) {
this.myPropTwo = myPropTwo;
}
public String getMyPropThree() {
return myPropThree;
}
public void setMyPropThree(String myPropThree) {
this.myPropThree = myPropThree;
}
}
在浏览器端,如果要发送映射
{ my_prop_one : 'val1', my_prop_two : 'val2', my_prop_three : 'val3'}
一种方法是创建定义toMap()方法并将所有属性一个一个地放置当它来自ui端时也这样做例如fromMap()
现在的问题是我想写一些通用函数
set('my_prop_one', 'val2')
以便它将查找实例并设置正确的值,我将扩展这个类以创建更多具有不同属性的乐器类型我可以使用annotation
public class Instrument {
private String myPropOne;
private String myPropTwo;
private String myPropThree;
@KeyMap(value="my_prop_one")
public String getMyPropOne() {
return myPropOne;
}
@KeyMap(value="my_prop_one")
public void setMyPropOne(String myPropOne) {
this.myPropOne = myPropOne;
}
@KeyMap(value="my_prop_two")
public String getMyPropTwo() {
return myPropTwo;
}
@KeyMap(value="my_prop_two")
public void setMyPropTwo(String myPropTwo) {
this.myPropTwo = myPropTwo;
}
@KeyMap(value="my_prop_three")
public String getMyPropThree() {
return myPropThree;
}
@KeyMap(value="my_prop_three")
public void setMyPropThree(String myPropThree) {
this.myPropThree = myPropThree;
}
}
我将不得不写两次注释。有更好的方法吗?比如我在属性上添加注解getter/setter被链接起来,用来提取属性,创建hashMap?
JsonUtil我已经使用输出
{ myPropOne : 'val1', myPropTwo : 'val2', myPropThree : 'val3'}
但是setter/getter只用于一个属性?怎么做呢?编辑3:
@JsonAnyGetter & @JsonAnySetter
就像在这里的例子中解释的那样,但它们只适用于map而不是真正的属性,这是我的要求
您试过https://github.com/flori/json-utils吗?里面有你想要的功能主义者。
如果你正在使用Jackson(根据你的评论),那么像这样的东西应该会自动为你处理这一切:
public class Instrument {
@JsonProperty private String myPropOne;
@JsonProperty private String myPropTwo;
...
}
然后你可以使用ObjectMapper类通过调用
来创建JSON:Instrument instrument = new Instrument();
instrument.setMyPropOne("val1");
// set other values
ObjectMapper mapper = new ObjectMapper();
// configure mapper if needed
mapper.writeValueAsString(instrument);