将rest端点中的Spring Data Jpa Projection编组为xml会产生奇怪的标记



编组spring数据jpa投影时,xml结构无效。代理显示为根xml标记,而不是投影接口类名。但是JSON输出很好,但是外部系统上的rest客户端不理解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();
}

来自rest端点的响应显示(我们需要application/xml(:

<.Proxy253>
<name>Alexander</name>
<city>Alexandria</city>
</.Proxy253>

代理标记中的数字正在更改。我希望有一个带有接口名称或@XmlRootElement(name = "user-short")注释的根标记,如下所示:

<user-short>
<name>Alexander</name>
<city>Alexandria</city>
</user-short>

我们在项目中使用了一个基于接口的SpringDataJPA投影。现在,我们希望在REST端点中使用它,而不公开存储库。因此,我们不能使用Spring Data Rest投影。由于嵌套投影,我们也不能使用基于类的投影。JSON输出看起来像预期的一样,但xml输出将代理类作为根标记写入。所有的XML注释都被忽略(枚举不会被转换为序数等(。

在调试器中,当我打开接口类型UserShort的变量时,我会看到类型com.sun.proxy.Proxy的实例,一些反射的东西。UserShort没有实现。

告诉整理器使用接口中的信息而不是spring-boot中的反射内容的首选方法是什么?

感谢的帮助

JAXB规范不支持您尝试的内容:

现有Java接口到模式的映射不支持构造。由于存在一个类可以实现多个接口,现有接口与XML模式结构之间没有明显的映射。

Sou您应该在Spring Data 上使用基于类的投影(DTO(

最新更新