2013-06-20 2 views
3

Я хочу прочитать строку из ответа HTTP, точно так же. Я пытаюсь сделать это [см. Ниже], и это бросает ошибку.RestTemplate getForObject с Не удалось прочитать JSON: Неожиданный символ ('<' (код 60))

1.Client

String string=getForObject("http://127.0.0.1:6060/dc-server/rest/dataset/Book/meta", String.class); 

2.Server

@ResponseBody 
@RequestMapping(value="/dataset/{datasetName}/meta", method=RequestMethod.GET) 
public String getDatasetMeta(@PathVariable("datasetName") String datasetName) { 
    return service.getDatasetMeta(datasetName); 
} 

Spring MVC настроить файл

<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> 

Исключение

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: [email protected]fa1; 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: [email protected]fa1; 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.springf[email protected]1371ddd] 

тело Response

<dataset xmlns="http://sucsoft.com/DC_DEF" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...... 
+0

Использование json-конвертера сообщений здесь не очень хорошо. '"' Не является допустимым символом для json. Если я все еще хочу использовать json-сообщение, я могу использовать JSONObject.quote (" "). – tomcat

ответ

2

Услуга вы обращаетесь возвращает ответ XML, а не ответ JSON. То, что вы, вероятно, должны сделать, это использовать JAX-B для преобразования этого xml в настоящий Java-объект.

С помощью this eclipse plugin вы можете создать уже аннотированный класс java из вашего XML-документа. Затем вы можете использовать этот класс в restTemplate (он не требует какой-либо специальной конфигурации Spring xml) в качестве класса, в котором вы хотите, чтобы xml десериализовался.

Как это:

Response response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null), Response.class); 

Убедитесь Response является аннотированный класс.

Если вы просто хотите строку, убедитесь, что весна не пытается десериализовать это, используя конвертер сообщений json.

+1

Большое спасибо Я просто хочу String, я нашел проблему. Спасибо за вашу помощь. – tomcat

 Смежные вопросы

  • Нет связанных вопросов^_^