Я работаю над проектом в struts2 с помощью json-plugin: у меня есть BaseAction, который расширяет ActionSupport и объявляет некоторые общие поля, помеченные аннотацией @JsonProperty ,Как получить значения, хранящиеся в полях класса, помеченных знаком @JsonProperty
public abstract class BaseAction extends ActionSupport {
@JsonProperty
private String commonField1;
@JsonProperty
private String commonField2;
public String execute() {
executeAction();
//some things to get the values in the JsonProperties
}
public abstract void executeAction();
}
Каждое действие в этой структуре расширяет BaseAction и объявляет некоторые конкретные поля, помеченные как @JsonProperty.
public class SpecificAction extends BaseAction {
@JsonProperty
private String specificField1;
@JsonProperty
private String specificField2;
public void executeAction() {
//things
}
}
Я искал способ доступа, в BaseAction, чтобы все значения, которые хранятся во всех областях @JsonProperty.
EDIT
Я попробовал вчера, используя
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(this);
Но это не сработало. Правильно ли это?
Я также попытался использовать отражение как ответ сказал, как это:
Field[] fields = this.getClass().getDeclaredFields();
Map<String, Object> jsonProperties = new HashMap<String, Object>();
for (Field field : fields) {
logger.debug(methodName, "Field " + field.getName());
field.setAccessible(true);
try {
if(field.isAnnotationPresent(JsonProperty.class)) {
Object obj = new Object();
logger.debug(methodName, "Field: " + field.getName());
jsonProperties.put(field.getName(), field.get(obj));
}
} catch(Exception e) {
logger.error(methodName, "Errore", e);
}
}
Но он вернулся мне исключение, что я не в состоянии решить:
IllegalArgumentException: Не удается установить сеть .sf.json.JSONObject в java.lang.Object
Jackson может иметь доступ к этим свойствам. –