Jackson caractère Inattendu ('h' (code 104)): une valeur valide
Je suis accès à une API REST en utilisant une URL qui me donne le JSON suivants résultat:
{"size":1,"filter":{"applicationName":"xx.x1",
"fromTimestamp":1261746800000,
"toTimestamp":1361833200000,
"company":"xx",
"groupedBy":"COMPANY_APPLICATION"},
"values"[{"applicationName":"xx.x1","count":17,"company":"xx"}],
"start":0,"limit":25,"lastPage":true}
À l'aide de Jackson j'essaye de parser le json de cette façon:
ObjectMapper mapper = new ObjectMapper();
try {
ErrorDataRest error = mapper.readValue(url, ErrorDataRest.class);
Map<String,Object> map = mapper.readValue(url, Map.class);
Dosn est pas grave si j'utilise la première ou la deuxième, j'ai cette exception:
dk.jyskebank.jee.core.exception.JyskeSystemException: Auto generated exception
at dk.sd.dumpmonitor.domainservice.RestErrorServiceBean.queryRESTurl(RestErrorServiceBean.java:46)
at service.RestErrorServiceTest.testQueryRESTurl(RestErrorServiceTest.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('h' (code 104)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.StringReader@30d82d; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442)
at org.codehaus.jackson.impl.ReaderBasedParser._handleUnexpectedValue(ReaderBasedParser.java:1198)
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:485)
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2770)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
at dk.sd.dumpmonitor.domainservice.RestErrorServiceBean.queryRESTurl(RestErrorServiceBean.java:43)
... 25 more
Je n'ai aucune idée de ce qui est mal ou comment résoudre le problème.
je n'ai pas accès à l'API rest, mais je sais qu'il utilise RESTeasy.
La seule chose que je veux, c'est la carte la réponse JSON pour une classe Java, peut-être, il est une autre façon de faire?
OriginalL'auteur Emil Kaminski | 2013-04-08
Vous devez vous connecter pour publier un commentaire.
Je devine votre variable
url
est unString
, plutôt que d'uneURL
, de sorte que Jackson est l'analyse de l'URL, comme si c'était une véritable chaîne JSON. Cela expliquerait le "caractère Inattendu 'h'", qui est sans doute la première lettre de votre URL (c'est à dire l'adresse http... quelque chose.) Le code "104" correspond à la valeur ASCII de "h".Si vous utilisez
mapper.readValue(new URL(url), ErrorDataRest.class);
ça fonctionne?OriginalL'auteur ryanp
Ce qui m'est arrivé après que j'ai (maladroitement et bêtement) utilisé
echo
pour obtenir des données XML dans un fichier de test:Bien sûr, il a perdu toutes les citations, et la cause de ce problème pour moi.
Assurez-vous que tous vos attributs ont leurs prix!
OriginalL'auteur Addison