You could remove @BeanProperty, and add a getter for Interoperability:
case class User(emails: List[String]) {
def getEmails = JavaConversions.asJavaIterable(emails)
}
Far more elegant is to use a Scala EL resolver
Update
As for the resolver: Somewhere in Thymeleaf/SpringEL, an expression parser resolves properties of beans: So in your example:
${user.emails[0]}
it possibly uses reflection to see if there is a getter method getEmails
in the user
object. This is the place where you could add the same code as in the linked Scala EL resolver: If the getter returns a Scala collection, wrap it in a Java iterable (or convert it to an array) before.