我正在调查 HAL+Forms 是否适合我们的用例的媒体类型。我在 Spring HATEAOS 中定义了一个服务器端示例,它返回一个集合加上可供性来创建一个新项目,例如
{"_embedded":{"resourceOneList":[
{"s":{"name":"subresource","mydata":{"c":"valueC","d":"valueD"}},"x":"bar","y":100},
{"s":{"name":"subresource","mydata":{"a":"valueA","b":"valueB"}},"x":"foo","y":10}
]},
"_links":{"self":{"href":"http://localhost:8080/path_one"}},
"_templates":{"default":{"method":"post","properties":[{"name":"s"},{"name":"x"},{"name":"y"}]}
}
}
我从当前文档中没有得到的是如何在 Java 客户端中以编程方式访问 _template。如果我使用 WebClient,我可以获取 self 链接的 URI 并将上面的 json 作为字符串获取。但是如果我尝试
Mono<CollectionModel<ResourceOne>> r = wc.get().uri("http://localhost:8080/path_one").accept(MediaTypes.HAL_FORMS_JSON).retrieve().bodyToMono( new TypeReferences.CollectionModelType<ResourceOne>(){});
但我认为这一定是错误的,因为集合模型无法访问 _templates。 有没有关于如何通过 WebClient 或 Traverson 以编程方式提取(命名)模板并将其作为 Java 对象获取的示例,然后我可以使用它回发到自链接?
我的用例充当下游服务的代理/编排层;因此,我需要在发送到 UI 层之前修改整个 hal-forms 有效负载,方法是更改所有链接的 URI(不仅仅是简单的域更改),并将一些额外的属性注入我的代码之前将使用的模板对象中将原始模板向下传递到目标 URL。所以理想情况下,模板对象需要是可变的。