RestTemplate getForObject avec ne Pouvait pas lire JSON: caractère Inattendu ("< " (code 60))
Je veux lire une Chaîne à partir de l'adresse http de la réponse,juste comme ça.
Je suis en train de le faire [voir ci-dessous], et il est en train de jeter erreur.
1.Client
String string=getForObject("http://127.0.0.1:6060/dc-server/rest/dataset/Book/meta", String.class);
2.Serveur
@ResponseBody
@RequestMapping(value="/dataset/{datasetName}/meta", method=RequestMethod.GET)
public String getDatasetMeta(@PathVariable("datasetName") String datasetName) {
return service.getDatasetMeta(datasetName);
}
spring mvc configurer le fichier
<bean id="jsonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter" />
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>
Exception
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@19a6fa1; line: 1, column: 2]; nested exception is org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@19a6fa1; line: 1, column: 2]
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:127)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:81)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:199)
at com.cgs.dc.client.rest.RestConnector.getDatasetMeta(RestConnector.java:55)
at server/rest/dataset/Book/meta" resulted in 200 (OK)
14:01:05,395 DEBUG RestTemplate:78 - Reading [java.lang.String] as "application/json" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@1371ddd]
Le corps de la réponse
<dataset xmlns="http://sucsoft.com/DC_DEF" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ......
À l'aide d'un json message convertisseur n'est pas bon." 'n'est pas valide char json. Si j'ai encore envie d'utiliser json message, je peux utiliser JSONObject.les guillemets("").
OriginalL'auteur tomcat | 2013-06-20
Vous devez vous connecter pour publier un commentaire.
Le service auquel vous souhaitez accéder est de retour une réponse xml, pas une réponse json. Ce que vous devriez faire est d'utiliser JAX-B afin de les convertir xml en un véritable objet java.
Avec ce plugin eclipse vous pouvez générer un déjà annoté de la classe java à partir de votre document xml. Ensuite, vous pouvez utiliser cette classe dans le restTemplate (il ne nécessite pas de toute spéciale printemps de configuration xml) comme la classe que vous voulez que le xml désérialisé.
Comme ceci:
Assurez-vous que
Response
est le annoté de la classe.Si vous voulez juste une chaîne de caractères, alors assurez-vous que le printemps n'est pas en essayant de désérialiser que l'utilisation d'un json message converter.
OriginalL'auteur CorayThan