2015-11-19 6 views
0

Если я объявить класс аннотаций следующим образом:Могу ли я открыть свойство аннотации?

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

    public String reportName(); 
} 

А потом построить список кучу классов, которые используют эту аннотацию и поставлять «REPORTNAME», но по-видимому, свойство REPORTNAME не подвергается, как нормальный добытчик. Я могу получить доступ к нему на Java, но если я верну свой список с использованием Spring, в строке JSON, которая переводится с него, не будет никаких свойств. Я надеялся увидеть:

{"reportName":"TPS Report"} 

вместо этого я вижу:

{} 

Есть ли что-то лишнее, я могу сделать, чтобы получить свойство REPORTNAME получить включены в JSON?

+0

Можете ли вы объяснить небольшим примером кода, что именно вы пытаетесь сериализовать? Sticking '@ JsonProperty' работает для большинства вещей, может быть, для вас тоже? – zapl

+0

Это именно то, что я пытаюсь сериализовать - экземпляры классов, которые используют этот настраиваемый атрибут @ReportType. Цель состоит в том, чтобы сериализовать reportName в JSON. Я думаю, что мне придется написать класс оболочки вокруг него, который предоставляет геттеры, чтобы заставить его работать. – Trant

+0

Да, один из способов состоит в том, чтобы иметь код типа https://github.com/netty/netty/blob/master/transport/src/main/java/io/netty/channel/ChannelHandlerAdapter.java#L36 в родительском классе все сериализованные классы, которые предоставляют значение как регулярное свойство. Нет необходимости в сеттерах. Другой альтернативой будет сериализатор клиента для «Объекта» http://www.baeldung.com/jackson-custom-serialization, но я думаю, что это становится трудным. Наконец, поскольку вы весной, я могу представить, что вы можете каким-то образом создать динамические прокси-классы (sub), которые регулярно раскрывают свойство, не наследуя это. – zapl

ответ

2

Одним из способов достижения этого является сохранение поля, reportName, в вашем POJO. Заполните это поле, используя значение аннотации класса, прежде чем передавать экземпляр для сериализации JSON.