2017-09-22 3 views
0

Dans mon application, je peux créer et mettre à jour des entités. Le problème est que je ne peux pas fusionner ces 2 méthodes dans une méthode createOrUpdate avec un mappage POST et vérifier si l'objet est nouveau ou non (c'est parce que l'ID n'est pas généré automatiquement, fourni par un utilisateur). Je me suis retrouvé à faire l'une des méthodes créer (mappage POST) et mettre à jour (mappage PUT). Mais après un moment je savais qu'au printemps l'un n'est pas capable de demander des paramètres, si la méthode est PUT. Donc, je suppose que je devrais utiliser 2 méthodes POST pour cela, mais ils ont le même modèle d'URL, car mon application ne peut pas fonctionner correctement.Est-il possible de distinguer 2 méthodes POST avec la même URL dans Spring MVC?

Est-il possible de faire quelque chose comme ça?

@RequestMapping(value = "/ajax/users") 
/.../ 
@PostMapping (//specific param here to distinguish???) 
public void create(User user) 
{ 
service.save(user); 
} 

@PostMapping(//specific param here to distinguish???) 
public void update(User user) 
{ 
service.update(user); 
} 

function save() { 
    $.ajax({ 
     type: "POST", //specific param here to distinguish? 
     url: ajaxUrl, 
     data: form.serialize(), 
     success: function() { 
      $("#editRow").modal("hide"); 
      updateTable(); 
      successNoty("Saved"); 
     } 
    }); 
} 

function update() { 
    $.ajax({ 
     type: "POST",//specific param here to distinguish? 
     url: ajaxUrl, 
     data: form.serialize(), 
     success: function() { 
      $("#editRow").modal("hide"); 
      updateTable(); 
      successNoty("Updated"); 
     } 
    }); 
} 

Merci à l'avance

+0

1/pourquoi ne pas utiliser 2 URL différente? 2/Je crois que vous pouvez utiliser @pathvariable 3/Vous envoyez le même formulaire, alors pourquoi s'embêter avec deux méthodes? –

+0

Qu'est-ce qui vous force à le concevoir comme ça? –

+0

: D D'accord, avoir une URL différente semble être la seule solution, thx –

Répondre

1

Vous pouvez utiliser l'annotation @RequestBody:

@PutMapping("https://stackoverflow.com/users/{id}") 
public void update(@PathVariable Long id, @RequestBody User user) 
{ 
    service.update(user); 
} 
+0

Mais le point ici est que vous ne pouvez pas demander quelque chose dans la méthode PUT –

0

Cela peut vous aider:

@RequestMapping(value="https://stackoverflow.com/users/{id}", method=RequestMethod.POST) 
+0

Bienvenue dans StackOverflow et merci pour votre aide. Vous pourriez vouloir améliorer votre réponse en ajoutant quelques explications. –