我可以公开注释属性吗?

时间:2015-11-19 22:49:00

标签: java json spring annotations

如果我声明一个这样的注释类:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ReportType {

    public String reportName();
}

然后我构建一个使用此注释的一堆类的列表,并提供一个' reportName'但显然属性reportName不像普通的getter那样暴露。我可以用Java访问它,但是如果我使用spring返回List,那么JSON字符串中没有可以从中转换的属性。我希望看到:

{"reportName":"TPS Report"}

相反,我看到了:

{}

我可以做些额外的事情来使reportName属性包含在json中吗?

1 个答案:

答案 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"}
    }

}