java - 当控制器的返回类型为接口的 Mono 时,返回值不会将返回值转换为 json,在 webflux 中
问题描述
在 Spring MVC 框架中,当控制器返回接口类型时,spring 的消息转换器可以将返回值转换为适当的消息(如 JSON)。
例如,当我调用“vehicle”api 时,我可能会收到一条 JSON 消息。
@GetMapping("vehicle")
public Vehicle getVehicle() {
return new Car();
}
public interface Vehicle {
}
public class Car implements Vehicle {
private String gearType;
}
但是,Webflux 的行为不同。当返回类型是单声道接口时,它只支持“内容类型:文本/事件流”。
@GetMapping("vehicle")
public Mono<Vehicle> getVehicle() {
return Mono.just(new Car());
}
在我看来,Webflux 的行为让人不舒服。它是一个错误吗?我是否需要添加自定义 MessageWriter 来编码接口类型?
解决方案
在带注释的控制器中,返回 a Vehicle
not a就足够了Mono<Vehicle>
,如Spring Docs中所述。
注意:您可以在使用时使用显式处理程序函数,Mono<T>
或者Flux<T>
因为处理程序函数在使用反应类型时更加显式。但是,它们使用起来更加冗长。
推荐阅读
- objective-c - Xamarin 方法调配不起作用。为什么不?
- android - Koin 中的 DSL 有什么用?
- python - (Python)我需要删除列表中的重复元素(使用删除功能;避免类型转换)。试图确定为什么我的解决方案不正确
- c# - 实体框架错误删除具有外键的对象
- angular - 即使在 Angular 8 中的 ngAfterViewInit 上也未定义 ViewChild elementRef
- java - android Studio 的 DownloadManger 类中“外部”的确切参考是什么?
- javascript - ASP / HTML / Javascript 无法正常工作
- mongodb - MongoDB 使用匹配而不是聚合
- react-native - 在视图中找不到意外的令牌反应本机
- css - CSS网格不考虑minmax中的最小值以及自动调整