Gram z scala, gram i gładzię. Zastanawiam się, w jaki sposób złapię błąd w grze.
Powiedzmy, że istnieje 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)
}
}
Ta cecha jest używana w moim kontrolerze:
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))
}
}
}
Jeśli nie ma użytkownika o podanym ID, slick zgłosi błąd:
[NoSuchElementException: Invoker.first]
W moim kliencie (przeglądarce) otrzymuję status 500 (błąd wewnętrznego serwera). Nie znajduję przykładów, jak gładko działa i gra ma współpracować z komunikatami o błędach z bazy danych lub zręczności.
Czy typ zwrotu wszystkich DAO należy wypróbować [Użytkownik]? We wszystkich przykładach, które widziałem, nikt nie dba o nieudane połączenia. czego mi brakuje?
Odpowiedzi:
3 dla odpowiedzi № 1Czy typ zwrotu wszystkich DAO należy wypróbować [Użytkownik]? We wszystkich przykładach, które widziałem, nikt nie dba o nieudane połączenia. czego mi brakuje?
Tęskniłeś Opcja. Zmień metodę DAO, aby powrócić Option[User]
i zamiast tego dzwonić head
połączenie headOption
na result
.