我想将错误包裹在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不知道如何将其转换为响应的原因。
有什么办法可以绕过这个?