当前位置: 首页 > 知识库问答 >
问题:

Spring Boot WebFlux转换器

嵇弘新
2023-03-14

我正试图将我的项目从Spring MVC迁移到Spring WebFlux。我目前使用的存储库是ReactiveCrudRepository。为了实现我在Spring MVC中使用的post-redirect-get模式,我需要重写当前的转换器来使用ReactiveCrudRepository

@Component
public class ObjByIdConverter implements Converter<String, Obj> {

    @Autowired
    private IObjRepository objRepository;

    @Override
    public Obj convert(String id) {
        return objRepository.findById(id).block();
    }
}

当我以这种方式实现转换器时,我会得到以下错误:block()/blockfirst()/blocklast()正在阻塞,线程reactor-http-xxx不支持这一点。当我使用CrudRepository而不是ReactiveCrudRepository时,一切都很好。

是否有一种方法可以实现转换器来使用ReactiveCrudRepository

~~~编辑1~~~

@PostMapping
public Mono<String> processOrder(@ModelAttribute("newCar") Car car) {

    webDataBinder.validate();
    BindingResult bindingResult = webDataBinder.getBindingResult();

    if (bindingResult.hasErrors()) {
        return Mono.just("orderForm");
    }

    return this.carRepository.save(car).thenReturn("redirect:/");
}
@Document(collection = "cars")
@ToString
@EqualsAndHashCode
public class Car {
    @Id
    private String id;
    private List<Obj> objs = new ArrayList<>();

    // constructor, getters, setters, ...
}

我必须为ObjByIDConverter提供实现,因为我得到以下错误消息:[未能将属性'objs'的类型'java.lang.String'的属性值转换为必需的类型'java.util.List‘;嵌套异常是java.lang.IllegalStateException:无法将属性'objs[0]“的类型'java.lang.String'的值转换为必需的类型'com.example.app.model.obj':找不到匹配的编辑器或转换策略]

共有1个答案

秦天宇
2023-03-14

在反应式开发中,在任何情况下都不应使用block。如果您有ReactiveRepository和Spring Webflux,请将它们与从存储库到控制器的mono/Flux一起使用,以利用反应性的方式。

但是我认为您尝试将结果转换为标准类型的主要原因是post-redirect-get模式,您能在spring controller上下文中详细说明这一点吗?

 类似资料:
  • 转换操作符 在通过操作符链时进行值的转换是一个常见的任务。这些操作符提供了转换技术几乎可以涵盖你所能遇到的任何场景。 内容 buffer bufferCount bufferTime :star: bufferToggle bufferWhen concatMap :star: concatMapTo exhaustMap expand groupBy map :star: mapTo merge

  • 我正在使用Spring Boot开发一个应用程序,在这里我实现了身份验证和授权。这是我的角色实体 Rold id在BaseModel中。我想从数据库中获取所有角色,为此我在RoleRepository中编写了一个方法,如下所示 但这又让我犯了这个错误 org . spring framework . core . convert . converternotfoundexception:未找到能够

  • 如果您需要在Aurelia应用程序中转换某些值,则可以使用converters而不是手动将值转换为所需的格式。 转换日期 当我们想要将默认日期值转换为某种特定格式时,我们可以使用momentJS库。 这是一个用于操作日期的小型库。 C:\Users\username\Desktop\aureliaApp>jspm install moment 让我们创建一个新文件converters.js 。

  • XStream转换器是XStream库的关键组件,它负责将对象转换为XML,反之亦然。 XStream为常见类型提供了大量转换器,例如基元,字符串,文件,集合,数组和日期。 使用转换器 让我们使用SingleValueConvertor,其目的是将对象转换为单个字符串。 我们将使用SingleValueConvertor将对象写为属性字符串。 创建转换器 class NameConverter i

  • 程序说明: 1. 依赖:Windows操作系统,.Net FrameWork 3.5, Office Word 2. Word另存为HTML有几种格式可以选:单个网页mht,网页htm以及筛选过的网页htm。我选择的是筛选过的html,所有公式全部转成gif或者jpg图片,稍微规范一点的htm不会含有微软中的一些恶心的格式信息。 运行界面如下: 1. 程序初始界面:   2. “Open”选择一个

  • 关于SpringWebFlux的小问题,以及如何“链接”http调用。 通过一个具体的例子,这里是一个非常简单的SpringMVC示例,带有一个rest模板。 在这个片段中,我们看到了非常简单的内容。仅初始化一个rest模板。 超文本传输协议请求有效载荷对象的构造。 使用所构建的对象来查询第一外部web应用API以获得响应。 重要的是,需要第一个HTTP调用的响应来进行第二个HTTP调用。它们只能

  • 问题内容: 这个问题已经在这里有了答案 : T-SQL转换与转换 (7个答案) 7年前关闭。 选择什么:或用于日期时间(Microsoft SQL Server)? 我看过MSDN规范。乍一看,似乎没有什么区别,除了语法: CAST的语法: CONVERT的语法: 而且 CAST 是ANSI标准,这使其在不同的数据库平台上都更具可移植性。 问题答案: 有一个可选参数,我建议用代替。它有助于避免混乱