Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java springwebfluxbean验证_Java_Spring_Validation_Spring Mvc_Spring Webflux - Fatal编程技术网

Java springwebfluxbean验证

Java springwebfluxbean验证,java,spring,validation,spring-mvc,spring-webflux,Java,Spring,Validation,Spring Mvc,Spring Webflux,我有一个简单的rest控制器(使用springWebFlux),它可以将一个bean保存在数据库中。但是像往常一样,我想在保存之前验证它的一些字段 在保存bean之前,我需要调用一个验证方法。但我如何才能以更实用(和适当)的方式做到这一点 我试过这样的方法: public void save(Mono<MyBean> myBean) { myBean.map(this::validateBean).map(myRepository::save) } publicsvoids

我有一个简单的rest控制器(使用springWebFlux),它可以将一个bean保存在数据库中。但是像往常一样,我想在保存之前验证它的一些字段

在保存bean之前,我需要调用一个验证方法。但我如何才能以更实用(和适当)的方式做到这一点

我试过这样的方法:

public void save(Mono<MyBean> myBean) {
    myBean.map(this::validateBean).map(myRepository::save)
}
publicsvoidsave(monomybean){
映射(this::validateBean).map(myRepository::save)
}
但是validateBean方法没有被调用,只有当我执行类似于

public void save(Mono<MyBean> myBean) {
    myBean.map(this::validateBean)
          .map(myRepository::save)
          .subscribe();
}
publicsvoidsave(monomybean){
map(this::validateBean)
.map(myRepository::save)
.subscribe();
}
我不知道subscribe部分是否是最正确的部分(我相信不是),但我认为它是有效的,因为这是一种终端操作。我说得对吗

即便如此,这也不能解决我的问题,因为当bean出现问题时,我的验证方法会抛出BusinessException。这正是我想要做的

[已编辑] 这是我的rest控制器,请告诉我:

@PostMapping(value = "/something")
public Mono<ResponseEntity> salvar(@RequestBody MyBean myBean) {
    return myService.salvar(myBean)
            .map(RestResponses::ok)
            .defaultIfEmpty(RestResponses.empty());
}
@PostMapping(value=“/something”)
公共Mono-salvar(@RequestBody-MyBean-MyBean){
return myService.salvar(myBean)
.map(重新响应::确定)
.defaultIfEmpty(resresponses.empty());
}
我知道这不起作用,因为我的服务不返回任何内容。但我不知道正确的方法是什么。所以我只是发布了一个想法。谢谢你的理解


你们能给我一些帮助吗?

据我所知,Mono是一家“冷门”出版商,这意味着它至少应该有一个子服务器来开始播放emmiting数据。你们能展示一下实际的控制器方法吗?此外,这个问题的核心可能是,您依赖于返回void的阻塞方法,而不是在保存数据时应返回Mono的被动存储库。请注意,订阅出版商通常是一种气味。@rvit34,谢谢您的评论。关于这一点,你能给我一些参考资料,让我能更好地理解吗?@BrianClozel,谢谢你的评论。我编辑了我的问题。当切换到webflux时,我也对验证感到困惑。据我所知,Mono是一个“冷”的发布者,这意味着它应该至少有一个子服务器来启动emmiting数据。你能展示一下你的实际控制器方法吗?此外,这个问题的核心可能是,您依赖于返回void的阻塞方法,而不是在保存数据时应返回Mono的被动存储库。请注意,订阅出版商通常是一种气味。@rvit34,谢谢您的评论。关于这一点,你能给我一些参考资料,让我能更好地理解吗?@BrianClozel,谢谢你的评论。我编辑了我的问题。我还对切换到webflux时的验证感到困惑,请参阅