2013-05-31 4 views
1

Я использую Spring framework для получения данных JSON с локального сервера в объект через Http GET. Но объект всегда пустой (данные хранятся)Spring Android Framework - получение данных JSON через HTTP GET

  • Я не проверил сервер и он работает нормально
  • сервер возвращает {"Propid":"61", "Proptitle":"3 bhk villa","Propdealer":"admin"}
  • Я добавил Джексон Библиотеки
  • у меня есть б StringHttpMessageConverter и возвращает строку JSON {"Propid":"61", "Proptitle":"3 bhk villa","Propdealer":"admin"}

кидает исключение: Could not extract response: no suitable HttpMessageConverter found for response type [com.aditya.master.classes.Prop] and content type [text/html;charset=UTF-8]

Вот код, который анализирует ответ JSON

URI targetUrl= UriComponentsBuilder.fromUriString("http://192.168.1.9/PinSpace/oauth/") 
        .path("request_access/") 
        .queryParam("query", "get_property") 
        .queryParam("access_token", auth_code) 
        .queryParam("prop_id", "61") 
        .build() 
        .toUri(); 

      HttpHeaders requestHeaders = new HttpHeaders(); 
      requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json"))); 
      HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); 


      RestTemplate restTemplate = new RestTemplate(); 

      restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 


      ResponseEntity<Prop> responseEntity = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, Prop.class); 
      Prop result = responseEntity.getBody(); 

Вот класс Prop

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import com.fasterxml.jackson.annotation.JsonProperty; 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Prop { 

@JsonProperty 
private String Propid, Proptitle, Propdealer; 


public String getPropid() { 
    return Propid; 
} 

public void setPropid(String propid) { 
    Propid = propid; 
} 

public String getProptitle() { 
    return Proptitle; 
} 

public void setProptitle(String proptitle) { 
    Proptitle = proptitle; 
} 

public String getPropdealer() { 
    return Propdealer; 
} 

public void setPropdealer(String propdealer) { 
    Propdealer = propdealer; 
} 
} 

Пожалуйста, предложить решение

Спасибо!

ответ

1

Вы можете проверить десериализации с последующим кодом:

ObjectMapper objectMapper = new ObjectMapper(); 
     String content = "{\"Propid\":\"61\", \"Proptitle\":\"3 bhk villa\",\"Propdealer\":\"admin\"}"; 
     objectMapper.readValue(content , Prop.class); 

Это trows exeception

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "Propid" 

, что означает, что поля именования в классе неверны или вам необходимо указать правильные имена в @JsonProperty аннотации

Предлагаем использовать следующую структуру:

public class Prop { 

    private String propid; 
    private String proptitle; 
    private String propdealer; 

    public String getPropid() { 
     return propid; 
    } 

    @JsonProperty("Propid") 
    public void setPropid(String propid) { 
     this.propid = propid; 
    } 

    public String getProptitle() { 
     return proptitle; 
    } 

    @JsonProperty("Proptitle") 
    public void setProptitle(String proptitle) { 
     this.proptitle = proptitle; 
    } 

    public String getPropdealer() { 
     return propdealer; 
    } 

    @JsonProperty("Propdealer") 
    public void setPropdealer(String propdealer) { 
     this.propdealer = propdealer; 
    } 

} 
+0

спасибо вакуума, ваш код десериализации работает отлично, но весна бросает исключение. Невозможно извлечь ответ: никакой подходящий HttpMessageConverter не найден для типа ответа [com.aditya.master.classes.Prop] и типа содержимого [text/html; charset = UTF-8] ', как я уже упомянул в редакции –

+0

Я решил это, установив тип контента на сервере для приложения/JSON, спасибо btw vacuum !! –

+0

@AdityaReddi Добро пожаловать – vacuum

0

Существует также способ заставить это работать с неправильным типом MIME: вам просто нужно добавить «text/html» в список принятых типов медиа. например:

MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
List<MediaType> mediaTypeList = new ArrayList<MediaType>(); 
//... 
mediaTypeList.addAll(jsonConverter.getSupportedMediaTypes()); 
mediaTypeList.add(MediaType.TEXT_HTML); 
jsonConverter.setSupportedMediaTypes(mediaTypeList); 

Это будет очень удобно, если у вас нет доступа к серверу.

ПРИМЕЧАНИЕ

есть, вероятно, менее многословный способ сделать это, но я просто получаю обратно в Java после 10 лет в других окрестностях :-)

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