При маршалинге проекции jpa данных пружины структура xml недопустима. Прокси отображается как тег root xml, а не как имя класса интерфейса проекции. Вывод JSON, однако, в порядке, но остальной клиент во внешней системе не понимает json.
Сущность выглядит как этот пример - реальная сущность более сложна:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String surname;
private String city;
private int age;
// getters, setters, ...
}
Интерфейс проекции выглядит следующим образом:
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement(name = "user-short")
public interface UserShort {
String getName();
String getCity();
}
Ответ от остальной конечной точки показывает (нам нужно приложение / xml):
<.Proxy253>
<name>Alexander</name>
<city>Alexandria</city>
</.Proxy253>
Число в теге прокси меняется. Я ожидал бы тег root с именем интерфейса или аннотацию @XmlRootElement(name = "user-short")
, подобную этой:
<user-short>
<name>Alexander</name>
<city>Alexandria</city>
</user-short>
Мы используем проекцию Spring Data JPA на основе интерфейса в нашем проекте. Теперь мы хотим использовать его в конечной точке REST, без открытых репозиториев. Поэтому мы не можем использовать прогнозы Spring Data Rest. Из-за вложенных прогнозов мы также не можем использовать прогнозы на основе классов. Вывод JSON выглядит ожидаемым, но вывод xml записывает прокси-класс в виде тега root. И все XML -аннотации игнорируются (перечисления не преобразуются в ординалы и т. Д. c.).
В отладчике, когда я открываю переменную типа интерфейса UserShort
Я вижу экземпляр типа com.sun.proxy.Proxy
, некоторые вещи отражения. Нет реализации UserShort
.
Какой предпочтительный способ сказать маршаллеру использовать информацию из интерфейса, а не информацию об отражении в весенней загрузке?
Спасибо за любую помощь