Java SimpleXML解析忽略@Root name参数
图书馆有问题。它忽略@Root name。下面是测试代码: 类别:Java SimpleXML解析忽略@Root name参数,java,android,xml-parsing,simple-framework,Java,Android,Xml Parsing,Simple Framework,图书馆有问题。它忽略@Root name。下面是测试代码: 类别: @Root(name = "res", strict = true) @Data @NoArgsConstructor @AllArgsConstructor class Response { @Attribute(name = "a") private Integer a; @Attribute(name = "i") privat
@Root(name = "res", strict = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
class Response {
@Attribute(name = "a")
private Integer a;
@Attribute(name = "i")
private Integer i;
@Attribute(name = "o", required = false)
private Integer o;
}
@Test
public void detectXml() {
Serializer serializer = new Persister();
String xml = "<xxx a=\"1\" i=\"1\"/>";
Response res = null;
try {
res = serializer.read(Response.class, xml);
} catch (Exception e) {
e.printStackTrace();
}
assertNotNull(res);
}
测试:
@Root(name = "res", strict = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
class Response {
@Attribute(name = "a")
private Integer a;
@Attribute(name = "i")
private Integer i;
@Attribute(name = "o", required = false)
private Integer o;
}
@Test
public void detectXml() {
Serializer serializer = new Persister();
String xml = "<xxx a=\"1\" i=\"1\"/>";
Response res = null;
try {
res = serializer.read(Response.class, xml);
} catch (Exception e) {
e.printStackTrace();
}
assertNotNull(res);
}
@测试
公共void detectXml(){
Serializer Serializer=new Persister();
字符串xml=”“;
响应res=null;
试一试{
res=serializer.read(Response.class,xml);
}捕获(例外e){
e、 printStackTrace();
}
资产不为空(res);
}
无论xml ie中的第一个标记是什么,测试都会通过。。。。。。。。
@转换(Response.ResponseConverter.class)
班级反应{
...........
公共静态类ResponseConverter实现转换器{
公共响应测试读取(InputNode节点)引发异常{
字符串rootAnnotation=ResponseTest.class.getAnnotation(Root.class.name();
如果(!node.getName().equals(rootAnnotation)&&node.isRoot()){
返回null;
}
返回新的ResponseTest();
}
.................
}
}
@试验
公共void detectXml(){
Serializer Serializer=new Persister();
字符串xml=”“;
responsetestres=null;
试一试{
StringReader StringReader=新的StringReader(xml);
res=newpersister(newannotationstrategy()).read(ResponseTest.class,NodeBuilder.read(stringReader));
如果(res!=null){
res=serializer.read(ResponseTest.class,xml);
}
系统输出打印项次(res);
}捕获(例外e){
e、 printStackTrace();
}
Assert.assertNotNull(res);
}
您可以使用@Converter annotation重写read方法,并通过获取注释值来验证根名称。这非常有效,但现在在read()中,反序列化必须手动完成,甚至是属性“o”的“必需”注释检查在responseconverter.read()方法中的@Root节点比较之后,是否可以继续自动反序列化?有一些间接的方法可以做到这一点,只需检查编辑后的答案。