Maak een controller aan genaamd be.kdg.blog.controllers.ResponseBodyController
(niet de beste naam, maar deze controller zal op termijn vervangen worden).
- Zorg voor een
final
attribuut van het typeBlog
dat via de constructor meegegeven wordt. De verantwoordelijkheid voor het aanmaken van de blog ligt niet bij deze controller. Gebruik dus dependency injection bij de constructor.- De annotatie die je terugvindt bij de
Blog
klasse staat daar niet toevallig. Zie sectie 2.2.4 van het boek.
- De annotatie die je terugvindt bij de
Je controller moet volgende functionaliteiten voorzien. Maak een methode voor beide functionaliteiten:
- GET op
/
- Je controller stuurt plain text terug naar de client. De tekst die je terug stuurt is "
Hello, world!
" (zonder quotes). - Zorg voor een correcte invulling van
Content-Type
in je HTTP header. Dit kan je makkelijk oplossen door de juiste parameter mee te geven aan deGetMapping
annotatie. - Het resultaat dat je methode teruggeeft is de content die de client in de HTTP body zou moeten terugvinden. Hiervoor bestaat de annotatie (ResponseBody).
- Je controller stuurt plain text terug naar de client. De tekst die je terug stuurt is "
- GET op
/html
- Je controller stuurt html terug naar de client. De tekst die je terug stuurt is "
<html><head><title>Hello!</title></head><body><h1>Hello, world!</h1></body></html>
" (zonder quotes). - Zorg voor een correcte invulling van
Content-Type
in je HTTP header. - De content moet opnieuw in de HTTP body terecht komen.
- Je controller stuurt html terug naar de client. De tekst die je terug stuurt is "
Vul de test-klasse ResponseBodyControllerTests
aan met volgende tests, één methode per test:
-
Doe een GET request naar
/
en accepteer enkel plain text.- Print het resultaat af om makkelijk fouten op te sporen
- Verwacht een HTTP status code 200 (OK)
- Verwacht dat de inhoud (content) van deze string het volgende is:
Hello, world!
-
Doe een GET request naar
/html
en accepteer enkel html.- Print het resultaat af om makkelijk fouten op te sporen
- Verwacht een HTTP status code 200 (OK)
- Verwacht dat de inhoud van deze string volgende string bevat (containsString):
<h1>Hello, world!</h1>
Tip: Voor opdracht 1 hoef je zelf geen mocking gedrag te bepalen. De methode waar dit wel nodig is is gegeven (testApi
). Je komt dus toe met één lange call naar this.mvc.perform
.
Vul je controller aan met volgende functionaliteit:
- GET op
/blog
- Je controller stuurt html terug naar de client.
Je overloopt de entries van de blog en hun tags en stelt een HTML string samen met o.a. enkeleh1
,h2
,p
,ul
,li
enspan
tags. Je kan je baseren op dit voorbeeld:
De layout is niet belangrijk!- Tip:
StringBuilder
- Tip:
- Zorg voor een correcte invulling van
Content-Type
in je HTTP header. - De content moet in de HTTP body terecht komen.
- Je controller stuurt html terug naar de client.
Vul je controller aan met volgende functionaliteit:
- GET op
/api/blog/entries/{entryId}
- Je controller stuurt json terug naar de client.
Het laatste deel van het pad (entryId) is een getal dat de ID van de gewenste blog entry voorstelt. De methode van je controller heeft een parameter nodig (ook met de naam entryId) die geannoteerd is metPathVariable
.
Informatie overPathVariable
kan je o.a. terugvinden in sectie 5.3.2 van het boek. De voorbeelden daar zijn niet uitgewerkt metResponseBody
, maar daarnaast heel toepasselijk.
Je gaat op zoek naar de juiste blog entry en stuurt deze terug in JSON formaat.
Tip: gebruik Gson om het object om te zetten naar een string in JSON formaat. - Zorg voor een correcte invulling van
Content-Type
in je HTTP header. - De content moet in de HTTP body terecht komen.
- Voer de test van methode
testApi
uit. Deze zou moeten slagen.
- Je controller stuurt json terug naar de client.
Request parameters
Naast het vastleggen van parameters in het pad van een URL kan je ook gebruik maken van request parameters. Request parameters, deel van de querystring, volgen in de URL na het pad, na een ?
.
- Probeer de entry ID mee te geven als request parameter m.b.v. de annotatie RequestParam, in plaats van via
PathVariable
. Zie ook sectie 5.3.1 van het boek.
ResponseEntity
Indien de client een onbestaande ID doorstuurt treedt er een HTTP error 500 op (die dan nog in HTML-vorm naar de client wordt verstuurd). Meer correct gedrag zou zijn om een 404 (not found) code terug te sturen.
- Wrap je teruggegeven resultaat-String in een ResponseEntity en gebruik code 404 indien de ID niet gevonden was.