Я собираюсь разработать веб-сервис RESTful на основе JAX-RS и использую MOXy (JAXB) для автоматической генерации ответов JSON моего веб-сервиса.
Все круто, но из-за того, что веб-сервис будет серверной частью веб-приложения на основе JavaScript и, следовательно, общедоступным, я не хочу раскрывать некоторые детали, такие как имена классов и т. Д. *
Но я понял, что при определенных условиях MOXy встраивает запись «@type» в маршаллированную строку, и за этой записью следует имя класса объекта, который только что был маршализован.
В частности, я понял, что MOXy ведет себя таким образом при сортировке экземпляров расширенных классов.
Предположим, что следующий суперкласс "MyBasicResponse"
@XmlRootElement(name="res")
public class MyBasicResponse {
@XmlElement
private String msg;
public MyBasicResponse() {
// Just for conformity
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
А это специализированный (расширенный) класс "MySpecialResponse"
@XmlRootElement(name="res")
public class MySpecialResponse extends MyBasicResponse {
@XmlElement
private String moreInfo;
public MySpecialResponse() {
// Just for conformity
}
public String getMoreInfo() {
return moreInfo;
}
public void setMoreInfo(String moreInfo) {
this.moreInfo = moreInfo;
}
}
Итак, маршаллированная строка объекта MyBasicResponse равна
{"msg":"A Message."}
(Это нормально!)
Но маршаллированная строка объекта MySpecialResponse имеет вид
{"@type":"MySpecialResponse","msg":"A Message.","moreInfo":"More Information."}
Есть ли способ раздеть
"@type":"MySpecialResponse"
из моего ответа?