/ / erreur de jeu en scala - scala, playframework

erreur de jeu en scala - scala, playframework, slick

Je joue avec la scala, joue et lisse. Je me demande comment je pourrais attraper une erreur de jeu lisse.

Disons qu'il y a un DAO:

trait UserDao extends DAOSlick with UserComponent with HasDatabaseConfig[JdbcProfile] {
import driver.api._

def getUserWithId(id: UUID) = {
db.run(userTable.filter { x => x.userId === id }.result.head)
}
}

Ce trait est utilisé dans mon contrôleur:

class UserController extends Controller with UserDao {
import driver.api._

def getUser(id: String) = Action.async { implicit request =>
getUserWithId(UUID.fromString(id)).map {
res => Ok(Json.toJson(res))
}
}
}

Si aucun utilisateur ne possède un ID donné, slick générera une erreur:

[NoSuchElementException: Invoker.first]

Dans mon client (navigateur), j'obtiens un Status 500 (Erreur interne du serveur). Je ne trouve pas d’exemples sur la façon dont Slick and Play est censé fonctionner avec les messages d’erreur de la base de données ou Slick.

Le type de retour de toutes les DAO doit-il être un Try [Utilisateur]? Dans tous les exemples que j'ai vus, personne ne se soucie de l'échec d'appels lisses. Qu'est-ce que je rate?

Réponses:

3 pour la réponse № 1

Le type de retour de toutes les DAO doit-il être un Try [Utilisateur]? Dans tous les exemples que j'ai vus, personne ne se soucie de l'échec d'appels lisses. Qu'est-ce que je rate?

Tu es absent Option. Changez votre méthode DAO pour retourner Option[User] et au lieu d'appeler head appel headOption sur result.