Для Джексона вы можете определить собственный десериализатор для ClauseType
в соответствии с
class ClauseTypeDeserializer extends StdDeserializer<DataMonitoringClauseType> {
@Override
public DataMonitoringClauseType deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
// get data, e.g.: data = jp.getCodec().readTree(jp).toString().getBytes();
// construct result:
return new DataMonitoringClauseType(data)
}
}
Вы можете сделать его более общим, заявив о возвращении ClauseType
, а затем приняв решение, какой экземпляр вернуть, основываясь на данных. В любом случае, зарегистрируйте его с помощью ObjectMapper
, используя:
ObjectMapper mapper = new ObjectMapper()
.registerModule(new SimpleModule()
.addDeserializer(ClauseType.class, new ClauseTypeDeserializer()));
Если вы когда-либо интересовались Gson, решение очень похоже:
class ClauseTypeDeserializer implements JsonDeserializer<ClauseType> {
@Override
public ClauseType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// get data, e.g.: data = jpson.toString().getBytes();
// construct result:
return new DataMonitoringClauseType(data)
}
}
И зарегистрируйте его с помощью GsonBuilder
:
Gson gson = new GsonBuilder()
.registerTypeAdapter(ClauseType.class, new ClauseTypeDeserializer())
.build();