@RestController ist eine Abkürzung für @Controller und @ResponseBody – und @ResponseBody gibt die Rückgabe eines Controllers direkt aus. Nachteil: Views werden nicht mehr automatisch aufgelöst; der View-Name wird direkt an den Browser geschickt.
Dafür übersetzen @RestController (serialisierbare) Objekte direkt in JSON, auch praktisch – und einfach nachzurüsten für @Controller: Einfach jede entsprechende Methode separat mit @ResponseBody annotieren.
Wer Velocity auf ‘nem Tomcat laufen hat, stolpert vielleicht mal über das Problem, dass das Character Encoding falsch gesetzt ist. Sprich, dass Umlaute falsch gerendert werden.
Das scheint schon mal was zu bewirken. Allerdings wird einem hier auffallen, dass die meisten (wenn nicht alle) Umlaute nicht im Template liegen, sondern dort nur reingeschrieben werden. In unserem Fall wurden zum Beispiel zum Teil Daten eines Webservice, zum Teil aber auch lokal gespeicherte XMLs verwendet. Die XMLs müssen UTF-8-kodiert gespeichert worden sein:
So. Last but not least müssen die Daten, die serverintern jetzt in UTF-8 vorliegen sollten, auch als solches an den Browser ausgegeben werden. Während normalerweise der Writer des Response ausreicht, um den OutputStream dieses Response zu handlen: