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

当流量为空时返回404

宋晋
2023-03-14

我试图在流量为空时返回404,类似于这里:WebFlux Functional:如何检测空流量并返回404?

我主要担心的是,当你检查通量是否有元素时,它会发出那个值,而你却松开了它。当我尝试使用switch时,如果服务器响应为空,它就永远不会被调用(我暗暗认为这是因为单声道不是空的,只有主体是空的)。

Flux<Location> response = this.locationService.searchLocations(searchFields, pageToken);
return ok()
        .contentType(APPLICATION_STREAM_JSON)
        .body(response, Location.class)
        .switchIfEmpty(Mono.error(new DataNotFoundException("The data you seek is not here.")));
Flux<Location> response = this.locationService.searchLocations(searchFields, pageToken);

return response.hasElements().flatMap(l ->{
   if(l){
       return ok()
               .contentType(APPLICATION_STREAM_JSON)
               .body(response, Location.class);
   } 
   else{
       return Mono.error(new DataNotFoundException("The data you seek is not here."));
   }
});

是否有一种方法可以恢复hasElements中发出的元素,或者让switchIfEmpty只检查主体的内容?

共有1个答案

萧焱
2023-03-14

您可以将switchifempty运算符应用于flux 响应

Flux<Location> response = this.locationService
        .searchLocations(searchFields, pageToken)
        .switchIfEmpty(Mono.error(new DataNotFoundException("The data you seek is not here.")));
 类似资料:
  • 给出这个简化的示例代码: 如何实现reduce操作的结果也是空的?

  • 我喜欢现在Java标准库中的选项。但有一个基本问题我一直碰到,但我还没想好如何用最好的(最容易读懂、最漂亮、最短的)方法解决: 当选项为空时如何从方法返回? 如果可选项为空,我如何从方法返回,而不必在方法的其余部分中使用,也不必声明额外的变量和额外的块嵌套级别? 或者如果不可能得到所有这些,那么处理这种情况的最佳方法是什么?

  • 我和我的同事有一个bug,这是由于我们假设调用的空流将返回。 当然,这是我们假设而不阅读文档的错误。但我不理解的是,为什么空流的默认行为返回。这样做的理由是什么?与(相反返回false)一样,该操作以命令方式使用,脱离单子,可能用于语句。考虑到这些事实,是否有任何理由让空流上的默认为对于大多数用途是可取的?

  • 你好,我有一个问题与elasticsearch php api,Elastica。 如果我运行这个: 我得到0个结果

  • 问题内容: 我有一个类需要使用杰克逊进行反序列化,并且该类具有collection属性。集合为空,但不为null。问题:如何在 没有 空集合的 情况下 反序列化类。下面的示例代码: 如果 那么json除外: 不 怎么做?谢谢~~ ================================================ 我已经通过n1ckolas的建议解决了这个问题。先谢谢你 我的杰克逊版本

  • 本文向大家介绍当C#中的结果为空时,LINQ返回什么?,包括了当C#中的结果为空时,LINQ返回什么?的使用技巧和注意事项,需要的朋友参考一下 语言集成查询(LINQ)是基于直接将查询功能集成到C#语言中的一组技术的名称。 您可以在C#中为SQL Server数据库,XML文档,ADO.NET数据集以及支持IEnumerable或通用IEnumerable <T>接口的任何对象集合编写LINQ查询