Java Jackson反序列化bellow JSON属性
对于给定的Java Jackson反序列化bellow JSON属性,java,json,spring,jackson,Java,Json,Spring,Jackson,对于给定的列表,我想获取多个(ParameterizedTypeReference responseType),在这种情况下,我想直接获取一个列表,但由于帐户列表封装在另一个对象中,因此我得到了一个错误,如下所示: { "accounts": [ { "accountUid": "c75deb59-5d52-4a23-af7b-fce29927ce9d", &quo
列表
,我想获取多个(ParameterizedTypeReference responseType)
,在这种情况下,我想直接获取一个列表
,但由于帐户列表封装在另一个对象中,因此我得到了一个错误,如下所示:
{
"accounts": [
{
"accountUid": "c75deb59-5d52-4a23-af7b-fce29927ce9d",
"defaultCategory": "b4189da5-7688-42d0-86e3-14ae9031e01d",
"currency": "GBP",
"createdAt": "2020-08-05T16:50:50.536Z"
}
]
}
有一些Jackson注释以某种方式对其进行过滤,以便进行如下处理:
[
{
"accountUid": "c75deb59-5d52-4a23-af7b-fce29927ce9d",
"defaultCategory": "b4189da5-7688-42d0-86e3-14ae9031e01d",
"currency": "GBP",
"createdAt": "2020-08-05T16:50:50.536Z"
}
]
波乔
RestRequestTemplate.java
public List fetchMultiple(参数化类型引用responseType){
返回新的RestTemplate().exchange(this.url、this.httpMethod、this.request、responseType).getBody();
}
AccountsServiceImpl.java
public List getAccounts(){
RestRequestTemplate RestRequestTemplate=新的RestRequestTemplate(获取帐户,HttpMethod.GET,Collections.EMPTY\u映射);
返回restRequestTemplate.fetchMultiple(新的ParameteredTypeReference(){});
}
确实有一个注释可以忽略根对象。它被称为@JsonUnwrapped
。用该注释注释您的方法,您的json
应该没有根对象。在fetchMultiple(ParameterizedTypeReference-responseType)方法中,是否有任何特定的理由将List作为参数?如果没有,我们可以将其更改为只获取多个(ParameterizedTypeReference responseType)您得到的错误是什么?com.fasterxml.jackson.databind.exc.MismatchedInputException:无法在[Source:(PushbackInputStream);第1行,第1列]处反序列化java.util.ArrayList
超出起始\u对象标记的实例我希望将List
作为参数,因为我正在寻找一个通用的解决方案,如果相反,我将T
作为参数,我将需要实例化AccountResponse
,实现如下:public List fetchMultiple(ParameterizedTypeReference responseType){AccountResponse response=(AccountResponse)new restemplate().exchange(this.url,this.httpMethod,this.request,responseType).getBody();return(List)response.getAccounts();}
@Data
public class Account {
private String accountUid;
private String defaultCategory;
private String currency;
private String createdAt;
}
public List<T> fetchMultiple(ParameterizedTypeReference<List<T>> responseType) {
return new RestTemplate().exchange(this.url, this.httpMethod, this.request, responseType).getBody();
}
public List<Account> getAccounts() {
RestRequestTemplate restRequestTemplate = new RestRequestTemplate(GET_ACCOUNTS, HttpMethod.GET, Collections.EMPTY_MAP);
return restRequestTemplate.fetchMultiple(new ParameterizedTypeReference<List<Account>>() {});
}