Этот вопрос, вероятно, будет звучать как дубликат, но я не могу собрать воедино полное решение своей проблемы.
Я пытался использовать пользовательские классы ser / deser, но это очень быстро утомительно (и терпит поражениеавтоматизация, которую должен обеспечить Джексон), и я попробовал миксины, но, может быть, я чего-то упустил.
Я бы даже смог попробовать другую библиотеку json, если она может сериализовать и десериализовать 3-ю. классы для вечеринок, которые я показал без особых усилий.
Я пробовал это. В результате возникает StackOverflowError.
ObjectMapper om = new ObjectMapper();
om.addMixIn(Word.class, WordMixin.class);
String ser = om.writeValueAsString(t);
Word r = om.readValue(ser, Word.class);
Я пробовал это. В результате выдается исключение InvalidDefinitionException: невозможно создать экземпляр net.sourceforge.tess4j.Word
(создатели, такие как создание по умолчанию, не существует): невозможно десериализовать из значения объекта (без создателя на основе делегатов или свойств)
ObjectMapper om = new ObjectMapper();
om.setVisibility(om.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY));
String ser = om.writeValueAsString(t);
Word r = om.readValue(ser, Word.class);
Мой класс по миксину
public static class WordMixin {
@JsonCreator
public WordMixin(@JsonProperty String text, @JsonProperty float confidence, @JsonProperty Rectangle rect){}
}
Урок третьей стороны.
public class Word {
private final String text;
private final float confidence;
private final Rectangle rect;
public Word(String text, float confidence, Rectangle boundingBox) {
this.text = text;
this.confidence = confidence;
this.rect = boundingBox;
}
public String getText() {
return text;
}
public float getConfidence() {
return confidence;
}
public Rectangle getBoundingBox() {
return rect;
}
@Override
public String toString() {
return String.format("%s [Confidence: %f Bounding box: %d %d %d %d]", text, confidence, rect.x, rect.y, rect.width, rect.height);
}
}