La conversion @RequestBody à un objet
Les gars, eh Bien, j'ai fait assez de recherches encore je ne peux pas trouver la solution à cette question.
En un mot, je suis tout simplement en passant l'url sous forme codée des données pour la méthode de Contrôleur et d'essayer de le convertir en un objet de domaine qui a Date et les nombres entiers.
@RequestMapping(value = "/savePassport", method = RequestMethod.POST)
public @ResponseBody
AjaxResponse savePassport(@RequestBody StaffPassport passport, HttpServletResponse response) {
//Some operations.
}
Le Personnel de Passeport ressemble à ceci:
import java.sql.Date;
public class StaffPassport {
private int staffId;
private String passportNumber;
private String placeOfIssue;
private Date issueDate;
private Date expiryDate;
private String spouseName;
private String oldPassportRef;
private String visaInfo;
private String description;
//gets/sets
}
Quand j'invoque le /savePassport, je reçois des médias non pris en charge exception. Je suppose que c'est lié à la coulée.
Je ne peux pas ce droit. Bien sûr, je peux attraper individuels, données de formulaire à l'aide de @RequestParam et de faire manuellement la coulée, mais qui n'est pas le point d'un cadre n'est-il pas?
Où vais-je tort? Et vous avez raison. Je suis débutant dans le Printemps, mais je l'aime.
- Bonne question, ResponseBody fonctionne bien, mais on ne sait pas comment faire le RequestBody automatiquement une liaison à un haricot? c'est bizarre...
Vous devez vous connecter pour publier un commentaire.
Dirait que vous utilisez la mauvaise annotation.
@RequestBody
est pour une demande qui a contenu arbitraire dans son corps,comme JSON, certaines applications XML définis, séparés par des virgules variables.. que ce soit. Et à l'aide d'un marshaller que vous configurez dans le répartiteur de servlet pour en faire des objets.Si tout ce que vous voulez faire est de demander Printemps de lier un simple vieux post de formulaire sur la sauvegarde de l'objet pour vous, l'annotation correcte de mettre sur le paramètre de méthode est
@ModelAttribute
.Si vous postez un Objet JSON avec jQuery et vous souhaitez le Printemps pour être en mesure de traiter avec @RequestBody, l'utilisation de JSON.stringify(....) dans vos données. Voici un exemple:
Si vous n'utilisez pas le JSON.stringify (), vous devrez présenter les données sous forme de données et le Printemps va vous dire que vous avez pris en charge type de média.
Tout d'abord assurez-vous que vous avez
dans votre fichier de configuration Spring. Ceci est obligatoire pour travailler avec JSOn dans SPring MVC.
Deuxième, je vous recommande de tester si la demande au serveur d'application/json type de contenu. Je belive Fiddler2 vous aidera à le faire.
Troisième, mais je ne suis pas sûr à ce sujet, Essayez de changer la Date des articles dans votre POJO de type SQL régulier de type java.
Mise à JOUR:
juste regardé la Forme, et il semble que votre "Accepter" HTTP en-Tête doit être aussi l'application/json. Veuillez tester ce problème avec Fiddler2 ainsi.
Je suppose que vous postez JSON et souhaitez Printemps à se convertir à StaffPassport. Si vous obtenez une non prise en charge des médias exception, c'est parce que le Printemps ne pouvait pas trouver un moyen approprié pour effectuer la conversion.
Pour le Printemps à convertir en JSON, il a besoin de Jackson -- assurez-vous que vous avez les Jackson pots dans votre projet. Si c'est un Maven en fonction du projet, vous pouvez ajouter le jackson-mappeur-asl artefact ID de votre pom.xml. Cela devrait vous donner la jackson-mappeur et jackson-core pots.
Edit: je tiens à préciser que cette règle s'applique pour le Printemps 3 (j'ai récemment rencontré ce problème). Je ne sais pas quoi d'autre est nécessaire pour les versions précédentes de Printemps.
Vérifier dans HttpMessageConverter interface et sa mise en oeuvre. Vous pouvez écrire votre propre mise en œuvre de convertir le modèle de domaine que vous souhaitez. Au moment où le contrôle est à votre méthode, vous pouvez y accéder que si votre modèle de domaine objet est passé.
Ok, je pense que je devrais affiner ma réponse. Je n'ai pas d'expérience directe de l'utiliser dans un spring-mvc projet mais le printemps-intégration. Je suis assez sûr applicable type de média (application/x-url-forme codée) est déjà traitées et converties en MultiMap par le framework Spring; ainsi, de récupérer les valeurs de qui tout comme n'importe quelle autre carte avec la touche de la valeur de votre variable de formulaire et de le remplir à votre modèle d'affaires.
HTH.