如何从case类要求将消息抛给http响应?

时间:2016-12-24 05:51:15

标签: spray akka-http json4s

给出具有任何需求的案例类

case class Foo(id: Int, value: Int) {
    require(value < 0 "value must be bigger than zero")
}

是否可以将此消息发送给http?

val routes = pathPrefix("foos") {
    pathEnd {
      post {
        entity(as[Foo]) { foo =>
          saveFoo(foo) match {
            case Success(p) => {
              complete(StatusCodes.Created)
            }
            case Failure(f) => {
              println(f.getMessage) // unknown error
              complete(BadRequest, f.getMessage)
            }
          }
        }
      }
    } 

1 个答案:

答案 0 :(得分:1)

Akka-HTTP基础结构已经将解组过程中发生的所有错误转换为400 (BadRequest)错误,并且将自动使用异常消息。

使用相同的代码,我可以免费获得该行为。我做了一些小改动:

  • 业务逻辑错误现在为500,以避免混淆

  • 案例类要求现在与消息一致(>是必需的,而不是<)。

  case class Foo(id: Int, value: Int) {
    require(value > 0, "value must be bigger than zero")
  }

  def saveFoo(foo: Foo): Try[Unit] = Success(())

  val route = pathPrefix("foos") {
    pathEnd {
      post {
        entity(as[Foo]) { foo =>
          saveFoo(foo) match {
            case Success(p) => {
              complete(StatusCodes.Created)
            }
            case Failure(f) => {
              println(f.getMessage) // unknown error
              complete(StatusCodes.InternalServerError, f.getMessage)
            }
          }
        }
      }
    }
  }