scala
"org.scalatra" %% "scalatra" % "2.7.1",
"org.scalatra" %% "scalatra-json" % "2.7.1",
"org.json4s" %% "json4s-jackson" % "3.6.11"
scala
import org.json4s._
import org.json4s.jackson.JsonMethods._
case class User(id: Int, name: String, email: String)
scala
import org.json4s.native.JsonMethods._
import scala.util.Try
object UserValidator {
def validateUser(userJson: JValue): Option[User] = {
val id = (userJson \ "id").extractOpt[Int]
val name = (userJson \ "name").extractOpt[String]
val email = (userJson \ "email").extractOpt[String]
None
} else {
val user = User(id.get, name.get, email.get)
Some(user)
}
}
}
scala
import org.scalatra._
import org.scalatra.json._
import org.json4s._
import org.json4s.JsonDSL._
class UserServlet extends ScalatraServlet with JacksonJsonSupport {
implicit val formats: DefaultFormats.type = DefaultFormats
post("/user") {
val userJson = parse(request.body)
val validatedUser = UserValidator.validateUser(userJson)
validatedUser match {
case Some(user) => s"Valid user: $user"
case None => halt(400, "Invalid user data")
}
}
protected implicit val jsonFormats: Formats = DefaultFormats
}
scala
class App extends LifeCycle {
override def init(context: ServletContext): Unit = {
context.mount(new UserServlet, "/")
}
}