Contrôleurs
TODO: RestController, ResponseBody
Bases
Une classe contrôleur est déclarée à l'aide d'un @Controller
.
@Controller
public class MyController {}
Pour définir un handler sur route, il faut créer une fonction, et utiliser un attribut RequestMapping.
@RequestMapping
prend en premier paramètre la route sur laquelle se bind
(@RequestMapping("/")
), et la méthode est définissable à l'aide du paramètre
nommé method
, par exemple method = RequestMethod.GET
.
@Controller
public class MyController {
@RequestMapping("/", method = RequestMethod.GET)
public void index() {
// ...
}
}
Additionnellement, Spring fournit des raccourcis, nommés @<méthode>Mapping
,
par exemple @GetMapping
.
Préfixe de chemin
Dans le cas où toutes les méthodes de notre contrôleur ont un préfixe commun,
par exemple /books/*
, on peut utiliser @RequestMapping
sur la classe.
@Controller
@RequestMapping("/books")
public class BookController {
@GetMapping("/")
public String listBooks() {
// ...
}
@GetMapping("/by-author")
public String listBooksGroupedByAuthor() {
// ...
}
}
Sur cet exemple, les routes crées sont /books
et /books/by-author
.
Réponse JSON
Un contrôleur @RestController
permet de renvoyer des objets bruts, et de laisser Spring s'occuper de la sérialisation en JSON.
@RestController
public class TestController {
@GetMapping("/")
public TestResponse handle() {
// Doing stuff, returning an instance
}
private static class TestResponse {
private final String field;
private final Integer anotherField;
TestResponse(String field, Integer anotherField) {
this.field = field;
this.anotherField = anotherField;
}
public String getField() { return field; }
public Integer getAnotherField() { return anotherField; }
}
}
{
"field": "value",
"anotherField": 666
}
Il est possible de renommer la clé qui sera utilisée pour le champ dans
la réponse, à l'aide de l'annotation @JsonProperty
appliquable sur le getter.
@JsonProperty("myOwnCustomField")
public String getField() { return field; }
{
"myOwnCustomField": "value",
"anotherField": 666
}
No Comments