(尽管至少存在一个创建者):没有字符串参数 constructor/factory 方法从字符串值 ('12') 反序列化
(although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('12')
以下方法 convertToObject 使用 Jackson 将 XML 转换为对象。我收到以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.test.Student`
(although at least one Creator exists):no String-argument constructor/factory method to deserialize from String value ('12')
这里是核心类:
private Students convertToObject(String xml) {
XmlMapper xmlMapper = new XmlMapper();
Students matchedObjects = null;
try {
System.out.println(xml);
matchedObjects = xmlMapper.readValue(xml, Students.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(matchedObjects);
return matchedObjects;
}
这是输入 XML:
<students>
<student><id>12</id><surname>DOE</surname><givenName>JOHN</givenName><marks>98.928</marks></student>
<student><id>13</id><surname>PRICE</surname><givenName>MIKE</givenName><marks>90.8444</marks> </student>
</students>
这是两个 POJO:
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
@JacksonXmlRootElement(localName = "student")
public class Student {
String id;
String givenName;
String surname;
String marks;
}
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
@JacksonXmlRootElement(localName = "students")
public class Students {
@JacksonXmlProperty(localName = "student")
private List<Student> student;
}
这是pom文件中的依赖。
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
您不需要 Students
包装器 class。将此 XML
有效负载反序列化为 List<Student>
:
CollectionType studentsListType = xmlMapper.getTypeFactory().constructCollectionType(List.class, Student.class);
List<Student> students = xmlMapper.readValue(xmlFile, studentsListType);
以下方法 convertToObject 使用 Jackson 将 XML 转换为对象。我收到以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.test.Student`
(although at least one Creator exists):no String-argument constructor/factory method to deserialize from String value ('12')
这里是核心类:
private Students convertToObject(String xml) {
XmlMapper xmlMapper = new XmlMapper();
Students matchedObjects = null;
try {
System.out.println(xml);
matchedObjects = xmlMapper.readValue(xml, Students.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(matchedObjects);
return matchedObjects;
}
这是输入 XML:
<students>
<student><id>12</id><surname>DOE</surname><givenName>JOHN</givenName><marks>98.928</marks></student>
<student><id>13</id><surname>PRICE</surname><givenName>MIKE</givenName><marks>90.8444</marks> </student>
</students>
这是两个 POJO:
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
@JacksonXmlRootElement(localName = "student")
public class Student {
String id;
String givenName;
String surname;
String marks;
}
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
@JacksonXmlRootElement(localName = "students")
public class Students {
@JacksonXmlProperty(localName = "student")
private List<Student> student;
}
这是pom文件中的依赖。
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
您不需要 Students
包装器 class。将此 XML
有效负载反序列化为 List<Student>
:
CollectionType studentsListType = xmlMapper.getTypeFactory().constructCollectionType(List.class, Student.class);
List<Student> students = xmlMapper.readValue(xmlFile, studentsListType);