用于嵌套对象的 JacksonConverter 和 ObjectMapper
JacksonConverter and ObjectMapper for nested objects
我正在使用 Retrofit 和 JacksonConverter 从 API.
中获取 JSON 数据
JSON 响应是这样的:-
[
{
"id": 163,
"name": "Some name",
"nested": {
"id": 5,
"name": "Nested Name",
}
}
]
但是在我的class中我只想要父对象的id、名称和嵌套对象的名称
我有这个 class :-
@JsonIgnoreProperties(ignoreUnknown = true)
class A{
@JsonProperty("id")
int mId;
@JsonProperty("name")
String mName;
@JsonProperty("nested/name")
String mNestedName;
}
我不想为A里面的嵌套对象再创建一个对象,我只想把嵌套对象的name字段存入A里面。
上面的 class 不会抛出任何异常,但 mNestedName 将为空。
有没有办法像这样获取数据?我需要为 mNestedName 更改 @JsonProperty 吗?
这就是我声明 Retrofit 实例的方式
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(JacksonConverterFactory.create())
.baseUrl(mBaseUrl)
.client(okHttpClient)
.build();
return retrofit;
我通过这个获取数据:-
@GET("something/list/")
Call<List<A>> getA(@Header("Authorization") String authorization);
我没有 Retrofit 方面的经验,但如果您的问题主要与 Jackson 有关。如果需要,可以通过使用 setter/getter 重构 A class 并将 setter 参数更改为通用对象来避免生成 POJO。
@JsonIgnoreProperties(ignoreUnknown = true)
public static class A{
@JsonProperty("id")
int mId;
@JsonProperty("name")
String mName;
@JsonIgnoreProperties
String mNestedName;
public String getmNestedName() {
return mNestedName;
}
@JsonProperty("nested")
public void setmNestedName(Object mNestedName) {
if(mNestedName instanceof Map) {
this.mNestedName = (String)((Map)mNestedName).get("name");
}
}
我正在使用 Retrofit 和 JacksonConverter 从 API.
中获取 JSON 数据JSON 响应是这样的:-
[
{
"id": 163,
"name": "Some name",
"nested": {
"id": 5,
"name": "Nested Name",
}
}
]
但是在我的class中我只想要父对象的id、名称和嵌套对象的名称
我有这个 class :-
@JsonIgnoreProperties(ignoreUnknown = true)
class A{
@JsonProperty("id")
int mId;
@JsonProperty("name")
String mName;
@JsonProperty("nested/name")
String mNestedName;
}
我不想为A里面的嵌套对象再创建一个对象,我只想把嵌套对象的name字段存入A里面。
上面的 class 不会抛出任何异常,但 mNestedName 将为空。
有没有办法像这样获取数据?我需要为 mNestedName 更改 @JsonProperty 吗?
这就是我声明 Retrofit 实例的方式
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(JacksonConverterFactory.create())
.baseUrl(mBaseUrl)
.client(okHttpClient)
.build();
return retrofit;
我通过这个获取数据:-
@GET("something/list/")
Call<List<A>> getA(@Header("Authorization") String authorization);
我没有 Retrofit 方面的经验,但如果您的问题主要与 Jackson 有关。如果需要,可以通过使用 setter/getter 重构 A class 并将 setter 参数更改为通用对象来避免生成 POJO。
@JsonIgnoreProperties(ignoreUnknown = true)
public static class A{
@JsonProperty("id")
int mId;
@JsonProperty("name")
String mName;
@JsonIgnoreProperties
String mNestedName;
public String getmNestedName() {
return mNestedName;
}
@JsonProperty("nested")
public void setmNestedName(Object mNestedName) {
if(mNestedName instanceof Map) {
this.mNestedName = (String)((Map)mNestedName).get("name");
}
}