다음과 같은 문제가 있습니다.java jackson parse generic 타입 객체를 포함하는 객체
json 요청을 제네릭 형식 필드가 들어있는 개체로 구문 분석해야합니다.
편집
나는 일반 클래스 형 (그래서 내가 일반적으로 교체하기 전에 그것이 작동되도록)를 사용하여 몇 가지 테스트를 만들었습니다. 이제 단일 요소에 대한 구문 분석이 효과적입니다.
문제점은 해당 클래스에서 목록 개체를 구문 분석해야 할 때입니다.
그래서 저는 Jackson에게 어떻게 든 T가 단지 AlbumModel 대신 유형 목록에 있다는 것을 알려야합니다.
다음은 내가 시도한 것입니다.
@Override
public ListResponseModel<AlbumModel> parse(String responseBody) throws Exception {
JavaType type = mapper.getTypeFactory().constructParametricType(ResponseModel.class,
AlbumModel.class);
return mapper.readValue(responseBody,
mapper.getTypeFactory().constructParametricType(ResponseModel.class, type));
}
위의 코드는 작동하지 않습니다. 이런 식의 해결책은 무엇입니까?
public class BaseResponseModel<T> {
@JsonProperty("data")
private T data;
@JsonProperty("paginations")
private PaginationModel pagination;
}
지금까지 나는 다음과 같은 코드를 가지고 있지만 항상 해시로 구문 분석 : List<T> data
이
이 같은 성공 : 같은 ListResponseModel에서
내 제네릭 형식 정의된다.
public class ResponseParser extends BaseJacksonMapperResponseParser<ResponseModel<AlbumModel>> {
public static final String TAG = ResponseParser.class.getSimpleName();
@Override
public ResponseModel<AlbumModel> parse(String responseBody) throws Exception {
return mapper.readValue(responseBody,
mapper.getTypeFactory().constructParametricType(ResponseModel.class, AlbumModel.class));
}
}
public abstract class BaseJacksonMapperResponseParser<T> implements HttpResponseParser<T> {
public static final String TAG = BaseJacksonMapperResponseParser.class.getSimpleName();
public static ObjectMapper mapper = new ObjectMapper();
static {
mapper.disable(Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
}
}
좋아요.이 작업을 시작합니다.이 작업을 단일 개체를 사용하여 만들었지 만 목록을 만들 수는 없습니다. 이것에 대한 정보를 조금 더 제공 할 수 있습니까? 지금까지 당신의 노력에 감사드립니다. – DArkO
업데이트보기 - 더 일반적인 Collection 클래스를 사용해보세요. –
나는 그것을 잘 만들었다. 이것과 유사하지만 당신은 한 가지 사실을 입증했습니다. 고마워. 내가 싫어하는 유일한 것은 .class를 보내고 generic 매개 변수를 정의해야하고 새로운 파서 (AlbumModel.class)과 같은 것으로 끝나야한다는 것입니다. –
DArkO