2013-05-31 3 views
1

J'utilise Spring framework pour obtenir des données JSON d'un serveur local dans un objet via Http GET. Mais l'objet est toujours nul (pas de données stockées)Spring Android Framework - Récupération de données JSON via HTTP GET

  • j'ai vérifié deux fois le serveur et il fonctionne très bien
  • le serveur retourne {"Propid":"61", "Proptitle":"3 bhk villa","Propdealer":"admin"}
  • J'ai ajouté les bibliothèques Jackson
  • J'ai utilisé StringHttpMessageConverter et il retourne la chaîne JSON {"Propid":"61", "Proptitle":"3 bhk villa","Propdealer":"admin"}

throws exception: Could not extract response: no suitable HttpMessageConverter found for response type [com.aditya.master.classes.Prop] and content type [text/html;charset=UTF-8]

Voici le code qui analyse la réponse 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(); 

Voici la classe 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; 
} 
} 

S'il vous plaît suggérer une solution

Merci!

Répondre

1

Vous pouvez tester désérialisation avec le code de suivi:

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

Ce trows exeception

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

ce qui signifie que les champs de nom dans votre classe est incorrect ou vous devez indiquer les noms corrects dans l'annotation @JsonProperty Je vous suggère d'utiliser la structure suivante:

+0

vide merci, votre code désérialisation fonctionne parfaitement mais le ressort jette une exception 'ne peut pas extraire la réponse: aucun HttpMessageConverter trouvé trouvé pour le type de réponse [com.aditya.master.classes.Prop] et le type de contenu [text/html; charset = UTF-8]' comme je l'ai mentionné dans l'édition –

+0

Je l'ai résolu en définissant le type de contenu sur le serveur à l'application/JSON, Merci btw vide !! –

+0

@AdityaReddi Vous êtes les bienvenus – vacuum

0

Il existe un moyen de faire fonctionner cela avec un type MIME incorrect: il suffit d'ajouter "text/html" à votre liste de types de média acceptés. comme si:

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

ce sera très pratique si vous n'avez pas accès au serveur.

NOTE

il y a probablement une façon de faire, mais moins bavard que je suis juste revenir à Java après 10 ans dans d'autres environs :-)

Questions connexes