在Springboot控制器中使用Monad

时间:2019-10-17 14:01:01

标签: spring scala spring-boot monads scalaz

我想将错误包裹在scalaz EitherT中。

我写了这种类型,因此我可以将所有内容包装在那里并在理解内进行操作

type Failure = ResponseEntity[String]
type HttpResult[A] = EitherT[Future, Failure,A]
def fromFOption[A](failure: => Failure)(foa: Future[Option[A]])(implicit ec: ExecutionContext): HttpResult[A] = EitherT(foa.map(_ \/> failure))

当我调用控制器时,它所做的只是返回一个空的JSON。我假设for理解是HttpResult类型,并且不知道如何将其转换为适当的休息响应

以下是一些示例:

这不起作用:

@RestController
@RequestMapping(path = "mypath")
@AllArgsConstructor
class foo(){
@GetMapping
def controller()
for{
    a<- fromFOption(/**body goes here*/)
  }
yield  new ResponseEntity[String]("RANDOM STRING", HttpStatus.Ok)
}

但这确实可行:

for{
    a<- fromFOption(/**body goes here*/)
}
yield  new ResponseEntity[String]("RANDOM STRING", HttpStatus.Ok)


new ResponseEntity[String]("RANDOM STRING", HttpStatus.Ok)

由于执行了最后一条语句,这就是为什么我猜测springboot不知道如何将其转换为响应的原因。

有什么办法可以绕过这个?

0 个答案:

没有答案