微服务架构之Spring Boot(三十五)

2022-04-07 20:01:04 浏览数 (1)

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) 来强制执行您的选择。

0 人点赞