Использование монад в контроллере Springboot - PullRequest
0 голосов
/ 17 октября 2019

Я хочу обернуть свои ошибки в скаляр 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. Я предполагаю, что для понимания является тип 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 не знает, как преобразовать его в ответ.

Есть ли способ обойти это?

...