vendredi 27 juillet 2018

Types de paramètres pour un contrôleur

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.