Это немного странная ситуация, потому что с фреймворком Play вы придерживаетесь либо Java, либо Scala. В моем случае я хочу Scala, но также хочу построить поверх проекта play-authenticate. который реализован как плагин Play Java (а не Scala).
Пытаясь перенести их образец использования на Scala и после выполнения большей части миграции на Scala, я столкнулся с проблемой наличия типов play.api.data.Form
Scala и необходимости перехода к типу play.data.Form
среды воспроизведения-аутентификации Java. Поэтому мне нужно преобразование между этими двумя отдельными классами (без общей абстракции или чего-то еще).
Я уже проверил реализацию play.core.j.JavaHelpers
, но нечего конвертировать между двумя отдельными типами Form
. Я мог бы сделать это вручную, но это плата за обслуживание, и мне было интересно, сталкивался ли кто-нибудь с этим и как это было решено?
ОБНОВЛЕНИЕ Я попробовал PlayMagicForJava
следующим образом, но волшебства не произошло :X
import javax.inject.{Inject, Singleton}
import play.api.data.Forms._
import play.api.i18n.Messages
import play.api.mvc.RequestHeader
case class Signup(email: String, password: String, repeatPassword: String, username: String)
@Singleton
class SignupForm @Inject() (implicit val request: RequestHeader, messages: Messages) {
import play.core.j.PlayMagicForJava._
val Instance : play.data.Form[Signup] = play.api.data.Form {
mapping(
"email" -> email,
"password" -> nonEmptyText(minLength = 5),
"repeatPassword" -> nonEmptyText(minLength = 5),
"username" -> nonEmptyText()
)(Signup.apply)(Signup.unapply).
verifying(messages("playauthenticate.password.signup.error.passwords_not_same"),
data => data.password != null && !data.password.isEmpty && data.password.equals(data.repeatPassword))
}
}
и ошибка:
[error] SignupForm.scala:16: type mismatch;
[error] found : play.api.data.Form[views.form.Signup]
[error] required: play.data.Form[views.form.Signup]
[error] val Instance : play.data.Form[Signup] = Form {