28.1.12 Spring HATEOAS
如果您开发使用超媒体的RESTful API,Spring Boot为Spring HATEOAS提供了适用于大多数应用程序的自动配置。自动配置取代了使
用 @EnableHypermediaSupport 并注册多个beans以简化基于超媒体的应用程序的需求,包括 LinkDiscoverers (用于客户端支持)
和 ObjectMapper 配置为正确地将响应编组到所需的表示中。ObjectMapper 是通过设置各种 spring.jackson.* 属性或(如果存
在) Jackson2ObjectMapperBuilder bean来自定义的。
您可以使用 @EnableHypermediaSupport 控制Spring HATEOAS的配置。请注意,这样做会禁用前面描述的 ObjectMapper 自定义。
28.1.13 CORS支持
跨源资源共享 (CORS)是大多数浏览器实现 的W3C规范,允许您以灵活的方式指定授权何种跨域请求,而不是使用一些不太安全且功能较弱
的方法,如IFRAME或JSONP。
从版本4.2开始,Spring MVC 支持CORS。在Spring Boot应用程序中使用带有 注释的控制器方法CORS配置 @CrossOrigin 不需要任何特定配
置。可以通过使用自定义的 addCorsMappings(CorsRegistry) 方法注册 WebMvcConfigurer bean来定义全局CORS配置,如以下示例所示:
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**");
}
};
}
}
28.2“Spring WebFlux框架”
Spring WebFlux是Spring Framework 5.0中引入的新的响应式Web框架。与Spring MVC不同,它不需要Servlet API,完全异步且无阻塞,并
通过Reactor项目实现Reactive Streams规范。
Spring WebFlux有两种版本:功能和注释。基于注释的注释非常接近Spring MVC模型,如以下示例所示:
@RestController
@RequestMapping("/users")
public class MyRestController {
@GetMapping("/{user}")
public Mono<User> getUser(@PathVariable Long user) {
// ...
}
@GetMapping("/{user}/customers")
public Flux<Customer> getUserCustomers(@PathVariable Long user) {
}
@DeleteMapping("/{user}")
public Mono<User> deleteUser(@PathVariable Long user) {
// ...
}
}
“WebFlux.fn”是功能变体,它将路由配置与请求的实际处理分开,如以下示例所示:
WebFlux是Spring框架的一部分,详细信息可在其 参考文档中找到。
您可以根据需要定义尽可能多的 RouterFunction beans来模块化路由器的定义。如果您需要应用优先级,可以订购Beans。
要开始使用,请将 spring-boot-starter-webflux 模块添加到您的应用程序中。
在您的应用程序中添加 spring-boot-starter-web 和 spring-boot-starter-webflux 模块会导致Spring Boot自动配置Spring
MVC,而不是WebFlux。选择此行为是因为许多Spring开发人员将 spring-boot-starter-webflux 添加到他们的Spring MVC
应用程序以使用被动 WebClient 。您仍然可以通过将所选应用程序类型设置
为 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE) 来强制执行您的选择。