我按照Apache Lingo教程中列出的步骤创建了一个示例OData服务。
客户收到的默认服务文档是:
{
"@odata.context" : "$metadata",
"value" : [
{
"name" : "Products",
"url" : "Products"
} ]
}
有没有办法配置Olingo在文档中包含完整的元数据uri?具体来说,假设服务在http://localhost:8080/DemoService/DemoService.svc/运行,我希望服务文档如下:
{
"@odata.context" : "http://localhost:8080/DemoService/DemoService.svc$metadata",
"value" : [
{
"name" : "Products",
"url" : "Products"
} ]
}
答案 0 :(得分:2)
您可以在调用序列化程序时设置元数据URL。签名有:serviceDocument(ServiceMetadata serviceMetadata,String serviceRoot)
为了自己调用序列化程序,您需要注册自己的ServiceDocumentProcessor以覆盖服务文档的DefaultProcessor。 您可以从DefaultProcessor复制服务文档的代码,并自己添加服务根。 以下是DefaultProcessor实现的链接:https://github.com/apache/olingo-odata4/blob/3786699f018ac2deb1df9571d12bb61ab57f2d8a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
答案 1 :(得分:1)
在EntityCollectionProcessor和EntityProcessor中将服务根URI设置为ContextURL的“ serviceRoot”属性。
ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).serviceRoot(<service root URI>).build();