したがって、私はSpringブート1.5.3を使用しており、次のJsonの一部にしようとしています - つまりAccountId
とUsername
- (実際はoData v2 restTemplate.exchangeを使用してクラスに)するSAP NetWeaverインスタンスから獲得インターフェイス:春Resttemplate:@JsonIgnoreを使用して解析すると値がNULLになる
{
"d":{
"__metadata":{
"id":"...",
"uri":"...",
"type":"...."
},
"AccountID":"0100000001",
"Username":"[email protected]",
"Partners":{
"__deferred":{
"uri":"Navigationproperty"
}
}
}
}
スタートのために、私は唯一のアカウントIDと名前を取得したいので、私のクラスは、このように設定されています
@JsonIgnoreProperties(ignoreUnknown = true)
public class PortalAccount implements Serializable{
public PortalAccount() {
}
@JsonProperty("AccountID")
public String accountID;
@JsonProperty("Username")
public String username;
public String getPortalAccountID() {
return accountID;
}
public void setPortalAccountID(String portalAccountID) {
this.accountID = portalAccountID;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "Account{" +
"accountID='" + accountID + '\'' +
", username='" + username +'\'' +
'}';
}
}
を
ここでは私が試してみる方法ですlのそれ:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = this.createHeaders();
ResponseEntity<String> response;
response = restTemplate.exchange(uri,HttpMethod.GET,new HttpEntity<Object>(httpHeaders),String.class);
ObjectMapper mapper = new ObjectMapper();
PortalAccount acc = mapper.readValue(response.getBody(), PortalAccount.class);
は、私が最初に直接ResponseEntity<PortalAccount>
を使用してドキュメントのようにそれを解析しようとしたが、これは単に空のクラス(アカウントID = nullで、ユーザ名=ヌル)につながるので、私はResponseEntity<String>
を使用して上記の方法を試してみましたレスポンスを文字列表現に解析するときに何が得られるかを見ることができます。そうすれば、上記のjsonが正しく返されていることを確認できます。値は確かにそこにあります。解析する必要がありますが、この問題を回避する方法はありません。
ここで私を助けてくれることを願っています!
edit:getForObjectが動作するかもしれませんが、これは私が基本認証を使用しなければならないので、私にとっては別の問題につながります。実際には実行可能ではありません。 AccountIDはうまくいかなかった。
私の推測では、問題はアカウントIDとユーザー名をラップするJSONのオブジェクト "d"です。これは、実際には、 "AccountId"と "Username"という文字列を含む "d"という名前のクラスに変換されます。テストの目的で、PortalAccountの代わりにクラス "d"の名前を付けてみてください。 –
また、PortalAccountクラスの@JsonTypeName( "d")を試してください。 –
だから、getBody()には質問に追加されたjson iが含まれています。今度はクラスを "d"に変更しようとしましたが、同じ動作になります。また、私はJsonTypeName( "d")を 'd'-Classに追加し、PortalAccount-re-refactoerd PortalAccount-Classに成功せずに試してみました:/ –