En passant objets JSON dans une requête HTTP GET à l'aide de Spring MVC
Selon cette RESTE modèle et à ce que je pense est un consensus sur le RESTE: tout RESTE récupération doit être effectuée comme une requête HTTP GET.
Le problème maintenant est de savoir comment traiter complexe objets JSON en tant que paramètres dans les requêtes GET avec Spring MVC.
Il y a aussi un autre consensus, j'ai trouvé en disant: "utiliser la POSTE pour les récupérations de!" juste parce que "les grandes entreprises le faire!", mais j'ai été invité à essayer de coller à la "RESTE le niveau 2".
Première question: suis-je en train d'essayer de faire quelque chose qui a du sens?
Je veux envoyer via les requêtes GET tableaux /listes /ensembles d'objets JSON, en Java avec Spring MVC.
Je n'arrive pas à comprendre quel est le problème avec mes tentatives, j'ai essayé d'ajouter/supprimer des guillemets, joué un peu avec les paramètres de l'URL, mais je ne peux pas atteindre cet objectif.
Quel est le problème avec le code suivant? L'extrait de code est à venir à partir d'un contrôleur MVC.
@RequestMapping(
value = "/parseJsonDataStructures",
params = {
"language",
"jsonBeanObject"
}, method = RequestMethod.GET, headers = HttpHeaders.ACCEPT + "=" + MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public HttpEntity<ParsedRequestOutputObject> parseJsonDataStructures(
@RequestParam String language,
@RequestParam CustomJsonBeanObject[] customJsonBeanObjects){
try {
ParsedRequestOutputObject responseFullData = customJsonBeanObjectService.parseJsonDataStructures(customJsonBeanObjects, language);
return new ResponseEntity<>(responseFullData, HttpStatus.OK);
} catch (Exception e) {
//TODO
}
}
J'ai essayé plusieurs façons de construire la requête d'URL (toujours obtenir le code HTTP de 400 Bad Request), c'est un exemple:
http://[...]/parseJsonDataStructures?language=en&jsonBeanObject={"doubleObject":10, "enumObject":"enumContent", "stringObject":"stringContent"}
L'objet JSON variables ar de type:
- Double (pas de la primitive)
- enum
- Chaîne
Je suis en supposant que je peux passer plusieurs jsonBeanObject
paramètres les uns après les autres.
La jsonBeanObject
Java bean est:
public class CustomJsonBeanObject {
private Double doubleObject;
private CustomEnum enumObject;
private String stringObject;
/**
* Factory method with validated input.
*
* @param doubleObject
* @param enumObject
* @param stringObject
* @return
*/
public static CustomJsonBeanObject getNewValidatedInstance(Double doubleObject, CustomEnum enumObject, String stringObject) {
return new CustomJsonBeanObject
(
doubleObject ,
enumObject ,
stringObject
);
}
private CustomJsonBeanObject(Double doubleObject, CustomEnum enumObject, String stringObject) {
this.doubleObject = doubleObject;
this.enumObject = enumObject;
this.stringObject = stringObject;
}
public CustomJsonBeanObject() {}
//getter setter stuff
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
Btw, Googlé "reste" de niveau 2", et n'a rien trouvé mais les lits.
comme je l'ai écrit: "j'ai été invité à essayer de coller à la "RESTE le niveau 2"", c'est à dire qui n'est pas un choix 🙂
Pourriez-vous ajouter le code pour CustomJsonBeanObject, trop?
Fait, j'ai aussi ajouté que l'exécution de la requête d'URL je suis toujours obtenir le code HTTP de 400 Bad Request.
OriginalL'auteur TPPZ | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
Votre déclaration au sujet uniquement à l'aide de GET ou POST, c'est pour RESTE complètement incorrect. La méthode HTTP utilisée dépend de l'action que vous effectuez. Pour la récupération, vous êtes censé utiliser un GET, pour ajouter/créer un POST, pour enlever/supprimer un de les SUPPRIMER et de remplacer un PUT. Aussi, pour être "vrai" RESTE, vous ne devez modifier l'état par le biais de l'auto-documenté, les mesures prévues par la réponse du serveur (lire sur HATEOAS). La plupart des gens ne font pas la dernière.
En aparté, j'ai essayé de chercher pour le "RESTE" de niveau 2", et a également obtenu de rien de la part des sites sur les lits et les Donjons et'Dragons. J'ai personnellement jamais entendu parler de lui, de sorte qu'il est apparemment tellement nouveau qu'il n'y a pas beaucoup de sites en parle ou il peut être appelé quelque chose d'autre.
À votre point de vue sur la façon d'envoyer un objet JSON, Spring MVC peut gérer que out-of-the-box. Vous pouvez lire ici, qui utilise le
@RequestBody
à tirer dans l'ensemble du corps de requête HTTP analyse puis à l'aide de votre JSON processeur de choix. Il y a beaucoup d'exemples de code, il y décrivant comment gérer les listes et les.OriginalL'auteur CodeChimp
D'abord créer une demande de haricot qui doit encapsuler les paramètres que vous attendez dans le cadre de la demande. Va l'appeler comme
SomeRequest
Deuxième dans le contrôleur de l'utilisation
@RequestBody
au lieu de@RequestParam
Troisième utilisation
RestTemplate
en tant que client de faire appel à vos services REST. Exemple de code ci-dessous -OriginalL'auteur Bond - Java Bond
J'ai utilisé la méthode ci-dessus pour analyser un fichier JSON et l'enregistrer comme objet JSON. On peut facilement remplacer le chemin par une URL. Espérons que cela aide.
N'oubliez pas de faire une demande.les propriétés de fichier composé de port et de divers autres configs. pour les anciens (pour exécuter le repos de l'application sur le port 8090, l'application.les propriétés de fichier doit avoir serveur.port=8090.
OriginalL'auteur Golokesh Patra