Frühling MVC, Thymeleaf & REST

9

Ich habe derzeit ein Projekt mit einem Spring-Controller und Thymeleaf, um eine kleine Browser-App zu erstellen. Die Controller-Klasse wird als

deklariert %Vor%

Innerhalb des Controllers habe ich ein GET als

definiert %Vor%

Das Aufruf-Repository und get foobarList ist ein Aufruf an ein MongoRepository , das wie folgt definiert ist:

%Vor%

Auch hier sieht die Browser App gut aus. Das GET ruft das Repository auf, füllt das Modell mit der Liste der foobars und Thymeleaf erledigt es mit dieser Liste.

PROBLEM: Jetzt muss ich auf dieselben Daten von einer Android App zugreifen, und ich würde REST lieber verwenden und einfach JSON in der Android App verbrauchen. Ich möchte Thymeleaf behalten, werde aber die Browser-App bei Bedarf umgestalten.

FRAGE: Gibt es eine Möglichkeit, den gleichen @Controller zu verwenden oder muss ich einen zweiten FoobarRestController mit @RestController mit / restFoobars Endpunkten verwalten? Der zweite REST-Controller funktioniert sicher, aber es scheint irgendwie schlampig ... schlechtes Design.

Ihre Gedanken und Empfehlungen?

Nochmals vielen Dank. -Rich

    
WARREN-R 08.10.2015, 00:50
quelle

2 Antworten

1

Mein bevorzugter Ansatz ist hier die Verwendung der Vererbung:

%Vor%

Alternativ können Sie, wenn die Eingabe oder ähnliches überprüft werden muss, diese in BaseController implementieren und eine abstract listAllResponse(DomainObject foo) haben, die dann die entsprechende ModelAndView (HTML) oder DTO (JSON) zurückgibt.

Der einzige Nachteil dieses Ansatzes besteht darin, dass Sie nicht nur einen Teil von @RequestMapping überschreiben können. Sie müssen also den Teil der Klasse wiederholen, wenn Sie den Parameter produces angeben, aber Sie können das übernehmen Zuordnungen auf Methodenebene ohne Probleme.

    
chrylis 08.10.2015 01:05
quelle
1

Expose Crud

Verwenden Sie @Controller , um die HTML-Seite zu bearbeiten, und verwenden Sie das Repository, um die Entität über die Rest-API für die grundlegenden Aktionen wie crud verfügbar zu machen, indem Sie SPRING-DATA-REST verwenden, um Ihre Entitäten verfügbar zu machen. Ich denke, du machst es bereits, indem du dir den Code ansiehst

%Vor%

Geschäftslogik sichtbar machen

Wenn Sie eine Geschäftslogik bereitstellen möchten, müssen Sie eine Service -Layer erstellen und sie einfach über Ihr @Controller für die Webseite aufrufen. und erstellen Sie einen weiteren Controller als @RestController für die Web-API-Schnittstelle.

Sie werden bemerken, dass Sie hier keinen Code duplizieren, da die Logik an dem einzelnen Punkt in der Service-Ebene geschrieben wird. Aber verschiedene Controller für verschiedene Zwecke verwenden.

Da Sie nicht die gesamte Logik in der Webseite für die API benötigen, kann die Verwendung des separaten Controllers für REST eine saubere Entwurfsimplementierung für Ihren Code sein, wenn Sie Ihren Code als app.web und app.api benennen können. .

Denkanstoß

Verwenden Sie eine vollständige REST-API-Implementierung für Webseiten und Android. Verwenden Sie dann AngualarJS oder backboneJs , um die clientseitige Implementierung mit HTML5 durchzuführen. Ich denke, das ist die Zukunft.

    
Faraj Farook 09.10.2015 13:51
quelle