2017-05-27 4 views
1

Ich habe eine grundlegende SpringBoot-App. Verwenden von Spring Initializer, eingebetteter Tomcat-, Thymeleaf-Vorlagen-Engine und Paket als ausführbare JAR.Analyse der JSON-Datei mit Spring RestTemplate

verbinde ich die Antwort auf URL und drucken:

BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 

     StringBuilder response = new StringBuilder(""); 
     String output; 
     while ((output = br.readLine()) != null) { 
      response.append(output); 
     } 

mit diesem Ergebnis:

{"data":[{"device":"18AE63","time":1494516023,"data":"3235","snr":"36.72","linkQuality":"GOOD"},{"device":"18AE63","time":1494515750,"data":"484f4c41","snr":"35.69","linkQuality":"GOOD"}],"paging":{}} 

Aber wenn ich RestTemplate verwenden

RestTemplate restTemplate = new RestTemplate(); 

     List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();   
     MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 

     converter.setSupportedMediaTypes(Arrays.asList(MediaType.ALL));   
     messageConverters.add(converter); 
     restTemplate.setMessageConverters(messageConverters); 

     MessageList messageList = 
        restTemplate.getForObject(url, MessageList.class); 

Ich habe diesen Fehler:

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON document: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:234) 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:219) 
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) 
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287) 
    at com.tdk.web.controllers.restful.client.RestTemplateGETExample.main(RestTemplateGETExample.java:49) 
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702) 
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558) 
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:456) 
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2689) 
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:878) 
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:772) 
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3834) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3783) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2922) 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:231) 
    ... 6 more 

die POJO:

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"data", 
"paging" 
}) 
public class MessageList { 

    @JsonProperty("data") 
    private List<Message> data = null; 
    @JsonProperty("paging") 
    private Paging paging; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("data") 
    public List<Message> getData() { 
    return data; 
    } 

    @JsonProperty("data") 
    public void setData(List<Message> data) { 
    this.data = data; 
    } 

    @JsonProperty("paging") 
    public Paging getPaging() { 
    return paging; 
    } 

    @JsonProperty("paging") 
    public void setPaging(Paging paging) { 
    this.paging = paging; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
    return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
    this.additionalProperties.put(name, value); 
    } 

    @Override 
    public String toString() { 
     return "MessageList [data=" + data + ", paging=" + paging + ", additionalProperties=" + additionalProperties 
       + "]"; 
    } 
} 
+0

Spring Boot wird alle Standard-Nachrichtenkonverter einrichten, wenn Sie nur JSON-Deserialisierung benötigen, ist alles, was Sie brauchen, ein korrekt konstruiertes POJO, das die JSON-Antwort erfüllt. Kannst du deinen Pojo posten? –

+0

Nachricht, die besagt, dass Ihre Antwort das unerwartete Zeichen '<' als 'restTemplate' hat, die versucht, die Antwort als JSON zu parsen. Aber du hast einen gültigen JSON zur Verfügung gestellt. Ich glaube du hast etwas verpasst ... – Zico

Antwort

0

Die Antwort Sie bekommen HTML ist, nicht JSON.

JsonParseException: Unexpected character ('<' (code 60)) 

Dies bedeutet in der Regel, dass Ihr HTTP-Aufruf eine HTML-Fehlerantwort bekam beschweren (man denke <html><h1>404 Not Found</h1>...</html>), daher den JSON-Parser, dass die Antwort nicht gültig JSON ist.

Verwandte Themen