Types de paramètres pour un contrôleur
Les exemples utilisent spring boot 2.
Nous allons voir comment effectuer une sauvegarde de donnée à l'aide de Spring.
Nous allons aborder l'approche avec un modeleAttribute et un RequestBody
Avec un requestBody
Tous les paramètres passent en JSon ou xml. Il est préférable d'employé un request body lors d'un envoi en ajax, même s'il est possible de le faire avec un modelAttribute.
Côté Client
$("#colorsForm").submit(function (e) {
e.preventDefault();
var colorsId= $('#colorsForm input[name="id"]').val();
var form = transForm.serialize('#colorsForm');
form = JSON.stringify(form);
$.ajax({
type: "post",
url: "/template/edit/colors/" + colorsId,
data: form,
contentType: "application/json",
dataType : "json",
success: function (data) {
$('#colorsForm input[name="id"]').val(data.id);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Erreur");
}
});
Côté serveur
@PostMapping("template/edit/colors/{id}")
@ResponseBody
public ColorsDto edit(Model model, @RequestBody ColorsDto dto, @PathVariable("id") Integer id) {
return colorsService.save(dto);
}
Avec un modeleAttribute
Tous les paramètres sont envoyé via l'url, cette façon de faire est à opter lorsqu'on désire lier un formulaire à un object du côté serveur.
Côté Client
$("#colorsForm").submit(function (e) {
e.preventDefault();
var colorsId = $('#colorsForm input[name="id"]').val();
$.ajax({
type: "post",
url: "/template/edit/colors/" + colorsId,
data: $("#colorsForm").serialize(),
success: function (data) {
$('#colorsForm input[name="id"]').val(data.id);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Erreur");
}
});
});
});
Côté serveur
@PostMapping("template/edit/colors/{id}")
@ResponseBody
public ColorsDto edit(Model model, @ModelAttribute ColorsDto dto, @PathVariable("id") Integer id) {
returncolorsService.save(dto);
}
Les deux façons de faire permettent d'arriver au même résultat.