如何使用 Jackson 通过 java 注释名称调用 class 方法?
How to call class method by java annotation name with Jackson?
想知道是否有一种方法可以通过 Jackson 注释 属性 名称(例如 "value"
)而不是方法名称(例如 [=14] 来调用 getter 方法=]) 或指出正确的方向?
public class Person {
private String name;
@JsonProperty("value")
public String getName() {
return name;
}
@JsonProperty("value")
public void setSet(String name) {
this.name = name;
}
}
我的目标是通过遍历 java 注释 属性 名称列表来调用多个方法。
如果你真的想直接识别和调用方法,你可以使用反射。类似(没有例外管理):
SomeObject object = ...;
Class<?> type = object.getClass();
for (Method method : type.getMethods()) {
JsonProperty property = method.getAnnotation(JsonProperty.class);
if (property != null && property.value().equals("value")) {
if (method.getParameterCount() == 0) {
Object value = method.invoke(object);
...
}
}
}
这是我用作 Allen D 的回答。
Map<String,Object> map = new ObjectMapper.convertValue(person, new TypeReference<Map<String,Object>>(){});
String s = (String) map.get("value");
想知道是否有一种方法可以通过 Jackson 注释 属性 名称(例如 "value"
)而不是方法名称(例如 [=14] 来调用 getter 方法=]) 或指出正确的方向?
public class Person {
private String name;
@JsonProperty("value")
public String getName() {
return name;
}
@JsonProperty("value")
public void setSet(String name) {
this.name = name;
}
}
我的目标是通过遍历 java 注释 属性 名称列表来调用多个方法。
如果你真的想直接识别和调用方法,你可以使用反射。类似(没有例外管理):
SomeObject object = ...;
Class<?> type = object.getClass();
for (Method method : type.getMethods()) {
JsonProperty property = method.getAnnotation(JsonProperty.class);
if (property != null && property.value().equals("value")) {
if (method.getParameterCount() == 0) {
Object value = method.invoke(object);
...
}
}
}
这是我用作 Allen D 的回答。
Map<String,Object> map = new ObjectMapper.convertValue(person, new TypeReference<Map<String,Object>>(){});
String s = (String) map.get("value");