![](/img/trans.png)
[英]Spring for Android - Could not extract response: no suitable HttpMessageConverter found for response type
[英]Spring Android Get Request implementation : Could not extract response: no suitable HttpMessageConverter found for response type and content type
我正在嘗試實現Android spring get請求。 當我運行應用程序時,出現以下錯誤。
無法提取響應:找不到適合於響應類型[com.example.userprofiledemo.UserProfile]和內容類型[text / html; charset = UTF-8]的HttpMessageConverter
Respose Body包含嵌套的類和類列表,Respose xml如下所示:
<UserProfile xmlns="http://schemas.datacontract.org/2004/07/"xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Address>Degisim A Blok Asmakat</Address>
<City>Adana</City>
<UserBookingInfo>
<ArrivalDate>2012-01-03T00:00:00</ArrivalDate>
<CourseTypeCode>ILS</CourseTypeCode>
</UserBookingInfo>
<UserPhotoList>
<UserPhoto>
<LikeCount>10</LikeCount>
<UserPhotoId>123</UserPhotoId>
</UserPhoto>
<UserPhoto>
<LikeCount>11</LikeCount>
<UserPhotoId>129</UserPhotoId>
</UserPhoto>
<UserPhoto>
<LikeCount>11</LikeCount>
<UserPhotoId>129</UserPhotoId>
</UserPhoto>
</UserPhotoList>
</UserProfile>
注意 :-
UserProfile(Userprofile.java)
是根類或節點 UserBookingInfo(UserBookingInfo.java)
是UserProfile
元素。 UserPhoteList(UserPhoteList.java)
是一個List UserPhotos(UserPhote.java)
在UsersProfile
這就是我使用Spring Android解析響應的方式。
我的REST客戶端PopulatePojo.java
public class PopulatePojo {
public UserProfile GetUserProfile() {
RestTemplate restTemplate = new RestTemplate(true);
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
FormHttpMessageConverter msgConverter = new FormHttpMessageConverter();
messageConverters.add(new StringHttpMessageConverter());
messageConverters.add(new SourceHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
UserProfile userProfile = null;
try {
userProfile = restTemplate.getForObject(url, UserProfile.class);
} catch (RestClientException e) {
e.printStackTrace();
}
return userProfile;
}
}
Bean類UserProfile.java
@Root
public class UserProfile {
@Element(name = "Address", required = false)
private String address;
@Element(name="City",required=false)
private String city;
@Element(name="UserBookingInfo",required=false)
private UserBookingInfo userBookingInfo;
@Element(name = "UserPhotoList")
private UserPhotoList userPhotoList;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public UserBookingInfo getUserBookingInfo() {
return userBookingInfo;
}
public void setUserBookingInfo(UserBookingInfo userBookingInfo) {
this.userBookingInfo = userBookingInfo;
}
public UserPhotoList getUserPhotoList() {
return userPhotoList;
}
public void setUserPhotoList(UserPhotoList userPhotoList) {
this.userPhotoList = userPhotoList;
}
}
Bean類UserBookingInfo.java
public class UserBookingInfo {
@Element(name="ArrivalDate",required=false)
private String arrivalDate;
@Element(name="CourseTypeCode",required=false)
private String courseTypeCode;
public String getArrivalDate() {
return arrivalDate;
}
public void setArrivalDate(String arrivalDate) {
this.arrivalDate = arrivalDate;
}
public String getCourseTypeCode() {
return courseTypeCode;
}
public void setCourseTypeCode(String courseTypeCode) {
this.courseTypeCode = courseTypeCode;
}
}
Bean類的UserPhotoList(UserPhotoList.java)的列表
@Root(name="UserPhotoList")
public class UserPhotoList {
@ElementList(inline=true,entry="UserPhoto")
private List<UserPhoto> userPhotos;
public List<UserPhoto> getUserPhotos() {
return userPhotos;
}
public void setUserPhotos(List<UserPhoto> userPhotos) {
this.userPhotos = userPhotos;
}
}
UserPhoto.java的Bean類
@Root
public class UserPhoto {
@Element(name = "LikeCount", required = false)
private String likeCount;
@Element(name = "UserPhotoId ", required = false)
private String userPhotoId ;
public String getLikeCount() {
return likeCount;
}
public void setLikeCount(String likeCount) {
this.likeCount = likeCount;
}
public String getUserPhotoId() {
return userPhotoId;
}
public void setUserPhotoId(String userPhotoId) {
this.userPhotoId = userPhotoId;
}
}
請讓我在哪里做錯了。 任何幫助,不勝感激。
當我使用simpleframe和Httpget時,它工作正常
下面是不使用RestTemplate的工作代碼
新線程(新Runnable(){
@Override
public void run() {
String xmlData = retrieve(url);
Serializer serializer = new Persister();
Reader reader = new StringReader(xmlData);
try {
UserProfile profile = serializer.read (UserProfile.class,
reader, false);
} catch (Exception e) {
Toast.makeText(MainActivity.this, "Error Occured",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
})。start();
公共字符串檢索(字符串url){
HttpGet getRequest = new HttpGet(url);
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
if (getResponseEntity != null) {
return EntityUtils.toString(getResponseEntity);
}
} catch (IOException e) {
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
}
return null;
}
我如何使用RestTemplete達到相同的目的
幾天來我都遇到了問題,任何幫助都非常值得
您的服務器返回XML內容,但是說它返回HTML內容(根據錯誤消息,內容類型為text/html
),因此解析失敗。 您需要確保服務器返回類似text/xml
並且還需要在rest模板對象中具有正確的轉換器。
編輯:嘗試添加此消息轉換器。 首先StringHttpMessageConverter
SourceHttpMessageConverter
(在StringHttpMessageConverter
和SourceHttpMessageConverter
之前)
Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(MediaType.TEXT_HTML);
jaxbMessageConverter.setSupportedMediaTypes(mediaTypes);
messageConverters .add(jaxbMessageConverter);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.