[英]How do I call two different REST api endpoints simultaneously and display the data from both on one endpoint of my app?
[英]How can a client call Spring Data Rest endpoints?
I have Spring Boot web application with a UI built using HTML / CSS / JavaScript. 我有另一个 Spring 引导应用程序,它公开 Spring 数据 Rest 端点。 这两个应用程序都在 Eureka 服务注册表中注册。
我希望 UI 应用程序调用另一个应用程序的 rest 端点之一。 它将使用数据填充 HTML 页面上的下拉框。 为此,我试图让 JavaScript 通过Traverson直接调用 REST API :
traverson.registerMediaType(TraversonJsonHalAdapter.mediaType,
TraversonJsonHalAdapter);
traverson
.from("http://spring-data-rest-server:8081/api/cars")
.jsonHal()
.newRequest()
.follow(list)
.getResource(...
这种方法有两个问题:
strict-origin-when-cross-origin
如何让 Traverson 调用 Spring 数据 Rest cars
端点而不对 URL 进行硬编码并避免 403?
根据spring 数据 rest doc ,您可以在存储库接口上配置 CORS
@CrossOrigin(origins = "http://domain2.example",
methods = { RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE },
maxAge = 3600)
interface PersonRepository extends CrudRepository<Person, Long> {}
或存储库 rest controller
@RepositoryRestController
public class PersonController {
@CrossOrigin(maxAge = 3600)
@RequestMapping(path = "/people/xml/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
public Person retrieve(@PathVariable Long id) {
// …
}
}
或全球
@Component
public class SpringDataRestCustomization implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
cors.addMapping("/person/**")
.allowedOrigins("http://domain2.example")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
}
2.1。 从服务注册表中获取主机和端口。 路径片段/api
可能是硬编码或在服务注册表端设置的,因为它是您设置的约定。
2.2. Traverson 调用http://host:port/api
,那么你应该有一个响应体
{
"_links" : {
"cars" : {
"href" : "http://spring-data-rest-server:8081/api/cars"
}
}
}
从cars
链接获取href
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.