J'essaie d'envoyer une requête AJAX à mon contrôleur dans Spring MVC.
Mon code d'action est:
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestParam(value = "start_date") String start_date, @RequestParam(value = "end_date") String end_date, @RequestParam(value = "text") String text, @RequestParam(value = "userId") String userId){
//some code
}
Ma requête Ajax est:
$.ajax({
type: "POST",
url:url,
contentType: "application/json",
data: {
start_date: scheduler.getEvent(id).start_date,
end_date: scheduler.getEvent(id).end_date,
text: scheduler.getEvent(id).text,
userId: userId
},
success:function(result){
//here some code
}
});
Mais j'ai une erreur:
Le paramètre de chaîne obligatoire '' date_début n'est pas présent.
Pourquoi? Comme je sais que je l'ai présenté comme (@RequestParam(value = "start_date") String start_date
UDP
Maintenant, je donne 404Ma classe pour prendre des données
public class EventData {
public String end_date;
public String start_date;
public String text;
public String userId;
//Getters and setters
}
Mon appel js AJAX est:
$.ajax({
type: "POST",
url:url,
contentType: "application/json",
// data: eventData,
processData: false,
data: JSON.stringify({
"start_date": scheduler.getEventStartDate(id),
"end_date": scheduler.getEventEndDate(id),
"text": scheduler.getEventText(id),
"userId": "1"
}),
Et action du contrôleur:
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestBody EventData eventData){
}
Et les données JSON sont:
end_date: "2013-10-03T20:05:00.000Z"
start_date: "2013-10-03T20:00:00.000Z"
text: "gfsgsdgs"
userId: "1"
Du côté serveur, vous attendez vos paramètres de requête en tant que chaînes de requête, mais du côté client, vous envoyez un objet JSON. Pour lier un json, vous devez créer une seule classe contenant tous vos paramètres et utiliser l'annotation @RequestBody au lieu de @RequestParam.
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestBody CommandBean commandBean){
//some code
}
Voici une explication plus détaillée.
J'ai eu le même problème .. Je l'ai résolu en spécifiant les paramètres de configuration dans la demande de poste:
var config = {
transformRequest : angular.identity,
headers: { "Content-Type": undefined }
}
$http.post('/getAllData', inputData, *config*).success(function(data,status) {
$scope.loader.loading = false;
})
config était le paramètre que j’avais inclus et il a commencé à fonctionner ...