Quarkus REST Jackson для преобразования между классом NetInfo и JSON и записи в файл
net.json.
Я могу сериализовать класс, но не могу его десериализовать.
Мой класс чтения/записи показан ниже:
Код: Выделить всё
public class WriterReaderFile
{
private static final ObjectMapper theMapper = new ObjectMapper()
.enable(SerializationFeature.WRAP_ROOT_VALUE)
.enable(SerializationFeature.INDENT_OUTPUT);
public boolean writeToFile(File theFile,InfoList theList)
{
boolean exists = theFile.exists();
if(exists)
{
try
{
theMapper.writeValue(theFile, theList);
}
catch (Exception e)
{
e.printStackTrace();
}
}
return(exists);
}
public NetInfoList readFromFile(File theFile)
{
NetInfoList theList = theMapper.convertValue(theFile, NetInfoList.class);
return(theList);
}
}
Код: Выделить всё
@JsonRootName("MyInfo")
public class NetInfoList extends ArrayList
{
public NetInfoList()
{
super();
}
}
Код: Выделить всё
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
// @JsonRootName("Info")
public class NetInfo
{
@JsonProperty("URI")
private String thePath;
@JsonProperty("Protocol")
@Builder.Default
private HttpProtocol selProtocol = HttpProtocol.Http;
@JsonProperty("Action")
@Builder.Default
private HttpAction theAction = HttpAction.Get;
}
Когда я тестирую этот класс, я записываю 3 экземпляра NetInfo в Net.json. Я получаю следующий результат:
Код: Выделить всё
{
"MyInfo" : [ {
"URI" : "/first",
"Protocol" : "Http",
"Action" : "Get"
}, {
"URI" : "/second",
"Protocol" : "Http",
"Action" : "Get"
}, {
"URI" : "/third",
"Protocol" : "Http",
"Action" : "Get"
} ]
}
@JsonRootName к классу NetInfo игнорируется анализатором (она закомментирована).
К сожалению, когда я пытаюсь прочитать файл Net.json и превратить его обратно в объект NetInfo, я получаю
следующую ошибку:
Код: Выделить всё
java.lang.IllegalArgumentException: Cannot deserialize value of type `net.factor3.app.net.NetInfoList` from String value (token `JsonToken.VALUE_STRING`)
at [Source: UNKNOWN; byte offset: #UNKNOWN]
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4730)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4661)
at net.factor3.app.defender.proxies.WriterReaderFile.readFromFile(WriterReaderFile.java:161)
at net.factor3.app.defender.BasicProxyTests.testreadFromFile(BasicProxyTests.java:140)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `net.factor3.app.net.NetInfoList` from String value (token `JsonToken.VALUE_STRING`)
at [Source: UNKNOWN; byte offset: #UNKNOWN]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:72)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1822)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1596)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1543)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:404)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromString(CollectionDeserializer.java:331)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:251)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:29)
сериализовался? Может ли это быть ошибка в библиотеках Quarkus Jackson? Что-то
мне следует сделать, чтобы сделать JSON десериализуемым?
Подробнее здесь: https://stackoverflow.com/questions/798 ... serialized
Мобильная версия