如果我声明一个这样的注释类:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ReportType {
public String reportName();
}
然后我构建一个使用此注释的一堆类的列表,并提供一个' reportName'但显然属性reportName不像普通的getter那样暴露。我可以用Java访问它,但是如果我使用spring返回List,那么JSON字符串中没有可以从中转换的属性。我希望看到:
{"reportName":"TPS Report"}
相反,我看到了:
{}
我可以做些额外的事情来使reportName属性包含在json中吗?
答案 0 :(得分:2)
实现此目标的一种方法是在POJO中保留一个字段reportName。在传递JSON序列化的实例之前,使用类上的注释值填充该字段。
@ReportType(reportName = "html")
public class HTMLReport {
//Can be potentially moved to parent class of all reports.
@JsonProperty("reportName")
private String reportName;
public String getReportName() {
return reportName;
}
public void setReportName(String reportName) {
this.reportName = reportName;
}
}
public class ReportName {
public static void main(String[] args) throws Exception, JsonMappingException, IOException {
HTMLReport r = new HTMLReport();
ReportType type = r.getClass().getAnnotation(ReportType.class);
String reportName = type.reportName();
r.setReportName(reportName);
ObjectMapper m = new ObjectMapper();
m.writeValue(System.out, r); //Produces {"reportName":"html"}
}
}