Integracja Scala + Spring

0

Uczę się Scali i mam problem podczas tworzenia aplikacji springowej. Wszystko jest OK do momentu używania scalowych kolekcji - nie jestem w stanie odnieść się do nich w systemie szablonów (używam Thymelefa) i nie są one serializowane do JSONa. Rozwiązanie z ręcznym zmienianiem na kolekcje z java.utils nie zdaje egzaminu, bo wymaga de facto tworzenia dodatkowych klas, które mają pola z kolekcjami javowymi zamiast scalowych.

Próbowałem używać różnych bibliotek, ale udało mi się stworzyć JSONa albo dla klasy bez kolekcji, ale dla samej czystej kolekcji. W Scala Cookbook jest przykład z użyciem Lift-JSON, ale tam dla każdej klasy trzeba przygotować osobny konwerter.

Możecie polecić jakieś rozwiązanie które działałoby automatycznie, tzn. dla każdej klasy nie byłoby konieczne przygotowanie osobnego konwertera? I czy jest jakiś sposób na odniesienie w Thymeleafie do klas zawierających scalowe kolekcje?

2

Dlaczego to robisz? Spring działa źle nawet z javą, ale ze Scalą to już totalny dramat będzie - nie rób tego.
W scali masz fajne biblioteki http4s, akka-http, (do tego tapir) - Spring nie ma sensu żadnego.

0

Wolałbym zostać przy Springu, bo w tym środowisku będę pracował, więc ogarnięcie go nieco bardziej byłoby wskazane (np. Spring Security). Frameworki typowo scalowe chciałem ogarnąć w drugiej kolejności.
W sumie podpinam się do pytania discoStar, bo frameworka zamierzam użyć póki co tylko do wystawienia endpointów i zabezpieczenia aplikacji (logowanie użytkowników).

1

Wszystko się da, pytanie po co. Scala ma swój oddzielny ekosystem, wiec takiego połączenia nie spotkasz w praktyce. Będziesz rozwiązywać jakieś sztuczne problemy związane z tym, że to Scala a nie Java/Kotlin. Ciężko Ci będzie znaleźć pomoc na Stacku czy tutaj.

Choose right tools for the job.

0

Obstawiam, że integrację kolekcji Scalowych ze Springiem można zrobić analogicznie do integracji vavr.io ze Springiem (są równie niekompatybilne). Z tym że nie znam się ani na jednym ani na drugim :)

0

Z Vavrem jest w sumie dokładnie ta sama historia :)

Wiem, że odbiegam od głównego tematu, ale czy znacie jakieś dobre materiały do nauki Akka? Czy najlepiej polegać na oficjalnej dokumentacji?

0

To, co chcesz zrobić będzie brzydkie i ciężkie w utrzymaniu. Miałem do czynienia z projektem scalowym pisanym a'la Java (Spring, JUnit, Maven) i wszyscy na to narzekali, przepisali do Javy jak tylko dostali czas.

0

Null null, mógłbyś rozwinąć temat z czym były największe problemy? Myślałem, że w Scali można pisać podobnie jak w Javie (tylko bardziej zwięźle podobnie jak w Kotlinie) + iść stopniowo w stronę kodu coraz mocniej funkcyjnego i stosować bardziej zaawansowane konstrukcje języka.

Sprawdziłem Vavra i okazuje się, że jest moduł Jacksonowy, który pozwala na łatwą serializację do JSONa - działa w połączeniu z kolekcjami i innymi konstrukcjami vavrowymi.

0

Jeśli bardzo chcesz iść w stronę Springa (nie oceniam w tym poście słuszności tego podejścia) to prawdopodobnie da się przerobić ten moduł do obsługi Vavra na moduł do obsługi kolekcji Scalowych. Scala ma wbudowane adaptery konwertujące kolekcje między API Javowym i Scalowym: https://docs.scala-lang.org/overviews/collections/conversions-between-java-and-scala-collections.html

2

Spring po prostu nie działa z Scala dobrze i musisz się liczyć że co rusz to będą problemy. Jeśli chcesz coś "sparingowego" to może warto zainteresować się Play?

Ogólnie dużo osób które przechodzą z Javy używa Scali w bardzo podobny sposób do tego im znanego i wychodzi "Scava". Nie ma w tym nic złego, nie bez powodu ten język wspiera dwa paradygmaty. Nie mniej, jeśli chcesz rzeczywiście wykorzystać potencjał scali to warto uczyć się innych podejść oraz odrzucić Springa - jego raczej nie zobaczysz w żadnym "normalnym" projekcie scalowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1