Retour de l'objet JSON comme réponse dans Spring Boot
J'ai un échantillon de Repos Contrôleur au Printemps de démarrage:
@RestController
@RequestMapping("/api")
class MyRestController
{
@GetMapping(path = "/hello")
public JSONObject sayHello()
{
return new JSONObject("{'aa':'bb'}");
}
}
Je suis l'aide de la librairie json : org.json
Quand j'ai touché l'api /bonjour, j'obtiens une exception en disant :
Servlet.service() de la servlet [dispatcherServlet] dans son contexte, avec chemin d'accès
[] a jeté exception [Demande de traitement a échoué; nested exception est
java.lang.IllegalArgumentException: Aucun convertisseur trouvé pour le retour
valeur de type: classe org.json.JSONObject] à causejava.lang.IllegalArgumentException: Aucun convertisseur trouvé pour le retour
valeur de type: classe org.json.JSONObject
Quel est le problème. Quelqu'un peut m'expliquer ce qui se passe exactement. Je suis nouveau sur SpringBoot.
Merci d'Avance 🙂
source d'informationauteur iwekesi
Vous devez vous connecter pour publier un commentaire.
Que vous utilisez le printemps de démarrage web, jackson dépendance est implicite et nous n'avons pas à définir de manière explicite. Vous pouvez le vérifier jackson dépendance dans votre pom.xml dans la dépendance de la hiérarchie onglet à l'aide d'eclipse.
Et que vous avez annoté avec
@RestController
il n'est pas nécessaire de faire explicite json de conversion. Juste de retour d'un POJO et jackson sérialiseur prendra soin de convertir en json. Il est équivalent à l'utilisation de@ResponseBody
lorsqu'il est utilisé avec @Contrôleur. Plutôt que de placer@ResponseBody
sur chaque contrôleur de méthode nous place@RestController
au lieu de la vanille@Controller
et@ResponseBody
par défaut est appliquée sur toutes les ressources dans le contrôleur.Consulter ce lien: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody
Le problème auquel vous êtes confronté est parce que l'objet retourné(JSONObject) n'a pas de getter pour certaines propriétés. Et de votre intention n'est pas de sérialiser ce JSONObject mais au lieu de sérialiser un POJO. Donc, il suffit de retourner le POJO.
Consulter ce lien: https://stackoverflow.com/a/35822500/5039001
Si vous voulez retourner un json chaîne sérialisée puis il suffit de retourner la chaîne. Le printemps va utiliser StringHttpMessageConverter au lieu de JSON convertisseur dans ce cas.
La raison pour laquelle votre approche actuelle ne fonctionne pas est parce que Jackson est utilisé par défaut pour sérialiser et désérialiser des objets. Cependant, il ne sait pas comment sérialiser l'
JSONObject
. Si vous souhaitez créer une dynamique de la structure JSON, vous pouvez utiliser unMap
par exemple:Cela conduira à la suite de réponse JSON:
C'est un peu limité, car il peut devenir un peu plus difficile pour ajouter des objets enfants. Jackson a son propre mécanisme si, à l'aide de
ObjectNode
etArrayNode
. Pour l'utiliser, vous devez autowireObjectMapper
dans votre service/contrôleur. Ensuite, vous pouvez utiliser:Cette approche vous permet d'ajouter un enfant objets, des tableaux, et d'utiliser tous les différents types.
Vous pouvez soit retourner une réponse comme
String
comme suggéré par @vagaasen ou vous pouvez utiliserResponseEntity
Objet fourni par le Printemps comme ci-dessous. Par cette façon, vous pouvez également retournerHttp status code
qui est plus utile dans le webservice appel.PS. Ne fonctionne que pour 1 valeur
vous pouvez également utiliser une table de hachage pour cette