2017-02-15 7 views
1

私はRetrieving JSON data via HTTP GETアンドロイド春休憩クライアント「為替」(406許容できない)

JSONレスポンスは、このようなものである。この例を実装しました:私は私のデータのでStringHttpMessageConverterを使用することはできません

{"employees":[{"personName":"Albert","personSurname":"1stein","personNumber":"1","personMobile":"5555555","personId":"1234567890","personCompanyCode":"CC01"}, 
{"personName":"Albert","personSurname":"2stein","personNumber":"2","personMobile":"5555556","personId":"1234567891","personCompanyCode":"CC01"}, 
{"personName":"Albert","personSurname":"2stein","personNumber":"3","personMobile":"5555557","personId":"1234567892","personCompanyCode":"CC01"}, 
{"personName":"Albert","personSurname":"4stein","personNumber":"4","personMobile":"5555558","personId":"1234567893","personCompanyCode":"CC01"}, 
{"personName":"Albert","personSurname":"5stein","personNumber":"5","personMobile":"5555559","personId":"1234567894","personCompanyCode":"CC01"}], 
"result":true,"message":"OK"} 

巨大です(従業員20万人)それは私にOutOfMemoryErrorを与えます。

例のようにjsonから直接このデータを取得したいのですが、406が受け入れられないエラーを返します。

myClass.java:私は、次の方法を試してみた

public class MyClass { private String personName; private String 
personSurname; .. .. 

(Setters and Getters) .. .. 


} 

、ないの違い:

restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, myClass.class) 

または

restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, myClass[].class) 

MYCLASSを取得するための正しい方法は何ですかこのjsonのオブジェクト?

+0

はあなたのクラス名は 'myClass'か' MyClass'ですか? @serhat – Coder

+0

Webサーバーからの応答の 'Content-Type'とは何ですか?それは 'application/json'ですか? 'requestEntity'にはどんなヘッダーが設定されていますか? 'requestHeaders.setAccept(Collections.singletonList(new MediaType(" application "、" json ")));'が含まれていますか? – gus27

+2

あなたのJSON結果は 'MyClass'要素だけの配列ではありません。 'MyClass'要素の配列は' employees'フィールドによってのみアクセスできます。したがって、 'private MyClass [] employees;のようなものを含む別のクラスを作成し、このクラスを' exchange'メソッドの第4のパラメータとして設定する必要があります。 – gus27

答えて

2

親ノードを経由するのではなく、直接子ノードを取得しようとしています。 Rest Templateは、デフォルトで応答JSONデータを指定されたクラスに変換しようとします。あなたのケースでは好きではない場合はエラーをスローします。ここで

EmployeeDataResponse employeeDataResponse = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, EmployeeDataResponse.class); 

を次のようにあなたの残りの呼び出しはする必要があります。この場合、あなたのJSONレスポンス

import java.util.List; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"employees", 
"result", 
"message" 
}) 
public class EmployeeDataResponse { 

@JsonProperty("employees") 
private List<Employee> employees = null; 
@JsonProperty("result") 
private Boolean result; 
@JsonProperty("message") 
private String message; 

@JsonProperty("employees") 
public List<Employee> getEmployees() { 
return employees; 
} 

@JsonProperty("employees") 
public void setEmployees(List<Employee> employees) { 
this.employees = employees; 
} 

@JsonProperty("result") 
public Boolean getResult() { 
return result; 
} 

@JsonProperty("result") 
public void setResult(Boolean result) { 
this.result = result; 
} 

@JsonProperty("message") 
public String getMessage() { 
return message; 
} 

@JsonProperty("message") 
public void setMessage(String message) { 
this.message = message; 
} 

} 

を含む親クラス従業員クラスここ

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"personName", 
"personSurname", 
"personNumber", 
"personMobile", 
"personId", 
"personCompanyCode" 
}) 
public class Employee { 

@JsonProperty("personName") 
private String personName; 
@JsonProperty("personSurname") 
private String personSurname; 
@JsonProperty("personNumber") 
private String personNumber; 
@JsonProperty("personMobile") 
private String personMobile; 
@JsonProperty("personId") 
private String personId; 
@JsonProperty("personCompanyCode") 
private String personCompanyCode; 

@JsonProperty("personName") 
public String getPersonName() { 
return personName; 
} 

@JsonProperty("personName") 
public void setPersonName(String personName) { 
this.personName = personName; 
} 

@JsonProperty("personSurname") 
public String getPersonSurname() { 
return personSurname; 
} 

@JsonProperty("personSurname") 
public void setPersonSurname(String personSurname) { 
this.personSurname = personSurname; 
} 

@JsonProperty("personNumber") 
public String getPersonNumber() { 
return personNumber; 
} 

@JsonProperty("personNumber") 
public void setPersonNumber(String personNumber) { 
this.personNumber = personNumber; 
} 

@JsonProperty("personMobile") 
public String getPersonMobile() { 
return personMobile; 
} 

@JsonProperty("personMobile") 
public void setPersonMobile(String personMobile) { 
this.personMobile = personMobile; 
} 

@JsonProperty("personId") 
public String getPersonId() { 
return personId; 
} 

@JsonProperty("personId") 
public void setPersonId(String personId) { 
this.personId = personId; 
} 

@JsonProperty("personCompanyCode") 
public String getPersonCompanyCode() { 
return personCompanyCode; 
} 

@JsonProperty("personCompanyCode") 
public void setPersonCompanyCode(String personCompanyCode) { 
this.personCompanyCode = personCompanyCode; 
} 

} 

されています答えについての明確化が必要な場合はお知らせください。

+0

これは完璧に動作します。これは私のような初心者のための良い例になるでしょう。ありがとうございました。 –

+0

うれしい私は助けることができた! – Coder

関連する問題