Avant de rentrer dans les détails, je sais qu'il y a eu beaucoup de conversations et des questions connexes sur Stackoverflow. Toutes sortes de m'aider de différentes façons j'ai donc pensé que j'ai mis mes découvertes tous ensemble comme une unique organisé FAQ pour résumer mes conclusions.
Des Concepts Liés À L'
Vous connaissez sûrement sur ces, mais je viens de les écrire comme un examen rapide. N'hésitez pas à modifier dans le cas où quelque chose m'échappe.
Requête HTTP POST:
Une requête post est utilisé lorsque vous êtes prêt à envoyer un objet à un service web ou une de votre côté serveur de l'application.
La sérialisation:
Est le processus d'obtention de l'objet à partir de votre navigateur web par le biais de votre côté serveur de l'application. Un appel Ajax jQuery ou une boucle de la requête post peut être utilisé.
La sérialisation des protocoles:
Les plus populaires sont ceux qui thèses jours sont JSON et XML. XML est en train de devenir de moins en moins populaire que xml sérialisé objets sont relativement plus grand en taille, en raison de la nature de balises XML. Dans ce document, l'accent est mis JSON2 de sérialisation.
Printemps:
Spring framework et son puissant annotation permet d'exposer service web de manière efficace. Il ya beaucoup de différentes bibliothèques au Printemps. Celui qui est notre objectif ici est web Spring MVC.
Curl vs JQuery:
Ce sont les outils que vous pouvez utiliser pour faire une requête post à votre côté client. Même si vous prévoyez d'utiliser JQuery ajax appel, je vous suggère d'utiliser Curl pour des fins de débogage comme il vous fournit une réponse détaillée après avoir fait la requête post.
@RequestBody vs @RequestParam/@PathVariable vs @ModelAttribute:
Dans le cas où vous avez un web service qui n'est pas selon votre Java EE modèle, @RequestBody doit être utilisé. Si vous utilisez le modèle et votre objet JSON est ajouté au modèle, vous pouvez accéder à l'objet via @ModelAttribute. Seulement pour les cas où votre requête est une requête GET ou un POST et GET demande combinaison vous aurez besoin d'utiliser @RequestParam/@PathVariable.
@RequestBody vs @ResposeBody:
Comme vous pouvez le voir à partir du nom, il est aussi simple que cela, vous avez seulement besoin de l' @ResponseBody si vous êtes d'envoyer une réponse au client après le côté serveur de la méthode traité la demande.
RequestMappingHandlerAdapter vs AnnotationMethodHandlerAdapter:
RequestMappingHandlerAdapter est le nouveau gestionnaire de mappage pour le Printemps-cadre, qui a remplacé AnnotationMethodHandlerAdapter depuis le Printemps 3.1. Si votre configuration existante est toujours en AnnotationMethodHandlerAdapter vous trouverez peut-être ce post utile. La config fourni dans mon post va vous donner une idée sur comment configurer le RequestMappingHandlerAdapter.
Le programme d'installation
Vous aurez besoin de configurer un message de convertisseur. C'est comment votre JSON sérialisé corps du message est converti en un objet java à votre côté serveur.
La Configuration de base à partir d' ici. Les convertisseurs ont été MarshallingHttpMessageConverter et CastorMarshaller dans la configuration de base de l'échantillon, je l'ai remplacé avec MappingJackson2HttpMessageConverter et MappingJacksonHttpMessageConverter.
Où mettre la configuration
La façon dont mon projet est mis en place, j'ai deux fichiers de configuration:
- Le Contexte de l'Application XML: Un il le contexte de l'application fichier XML où votre sessionFactory de haricot, de la source de données de haricots, etc. sont situés.
- MVC Répartiteur Servlet, XML: C'est là que vous avez votre point de vue résolveur de haricots et de l'importation de votre contexte de l'application XML.
hadlerAdapter bean doit être situé dans le plus tard, c'est le MVC Répartiteur fichier XML.
<bean name="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<ref bean="jsonConverter"/>
</list>
</property>
<property name="requireSession" value="false"/>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
Vous pouvez avoir plusieurs message de fumées. ici, j'ai créé un normal JSON ainsi qu'un JSON 2 message transformateur. Les deux Ref et normal bean format dans le fichier XML ont été utilisés (personnellement je préfère la ref balise comme son plus propre).
API REST
Voici un exemple de contrôleur qui est d'exposer l'API REST.
Le contrôleur
C'est là que votre API REST pour une requête HTTP de type post est exposée.
@Component
@Controller
@RequestMapping("/api/user")
public class UserController {
@RequestMapping(value = "/add", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String insertUser(@RequestBody final User user) {
System.out.println(user.toString());
userService.insertUser(user);
String userAdded = "User-> {" + user.toString() + "} is added";
System.out.println(userAdded);
return userAdded;
}
}
L'Objet Java
@JsonAutoDetect
public class User {
private int id;
private String username;
private String name;
private String lastName;
private String email;
public int getId() {
return externalId;
}
public void setId(final int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(final String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(final String username) {
this.username = username;
}
public String getLastName() {
return lastName;
}
public void setLastName(final String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return this.getName() + " | " + this.getLastName() + " | " + this.getEmail()
+ " | " + this.getUsername() + " | " + this.getId() + " | ";
}
}
CURL appel Post
curl -i -H "Content-Type: application/json" -X POST -d '{"id":100,"username":"JohnBlog","name":"John","lastName":"Blog","email":"JohnBlog@user.com"}' http://localhost:8080/[YOURWEBAPP]/api/user/add
Related posts et des questions
Cette FAQ n'a pas été possible si elle n'était pas pour toutes les personnes qui ont fourni les postes suivants et des questions (cette liste élargir si je viens à travers utiles related posts/questions):
- Quelle est la correcte JSON type de contenu?
- Spring 3.0 prise de réponse JSON à l'aide de jackson message convertisseur
- Comment publier des données JSON avec Curl à partir de la Borne/ligne de commande pour Tester Printemps RESTE?
- Affichage JSON à l'API REST
- https://github.com/geowarin/spring-mvc-examples
- Comment publier JSON en PHP avec curl
- Printemps de REPOS | MappingJacksonHttpMessageConverter produit invalid JSON
- https://github.com/eugenp/REST
- Web Spring MVC - valider la demande individuelle params
- Comment publier des données JSON avec Curl à partir de la Borne/ligne de commande pour Tester Printemps RESTE?
- Comment voulez-vous retourner un objet JSON à partir d'une Servlet Java
- Quel type MIME si JSON est retourné par une API REST?