当前位置: 首页 > 面试题库 >

使用杰克逊xml映射器将xml反序列化为pojo

皇甫建木
2023-03-14
问题内容

我正在使用Jackson XML映射器将XML反序列化为POJO。XML看起来像

<person>
 <agency>
        <phone>111-111-1111</phone>
 </agency>
</person>

我的课看起来像

class Person
{
 @JacksonXmlProperty(localName="agency", namespace="namespace")
 private Agency agency;
 //getter and setter
}
class Agency
{
 @JacksonXmlElementWrapper(useWrapping = false)
 @JacksonXmlProperty(localName="phone", namespace="namespace")
 private List<AgencyPhone> phones;
 //getter and setter
}
class AgencyPhone
{
  private Phone phone;
  //getter and setter
}
class Phone
{
 private String number;
 //getter and setter
}

我想将电话号码设置为“电话”类别中的号码。我无法更改XML或类的构造方式。我收到无法构造resolved.agency.AgencyPhone错误的实例,并创建了一个AgencyPhone构造函数

class AgencyPhone{
{
  private Phone phone;
  public AgencyPhone(Phone phone)
  {
      this.phone = phone;
   }
  }

但这没有用。那么如何反序列化嵌套实例。


问题答案:

您可以编写自己的自定义解串器来实现此目的。这是使您入门的代码:

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;

public class Test {
  public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
    XmlMapper mapper = new XmlMapper();
    final SimpleModule module = new SimpleModule("configModule",   com.fasterxml.jackson.core.Version.unknownVersion());
    module.addDeserializer(Person.class, new DeSerializer());
    mapper.registerModule(module);
    // Person readValue = mapper.readValue(<xml source>);
  }
}

class DeSerializer extends StdDeserializer<Person> {

  protected DeSerializer() {
    super(Person.class);
  }

  @Override
  public Person deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
    // use p.getText() and p.nextToken to navigate through the xml and construct Person object
    return new Person();

  }
}


 类似资料:
  • 问题内容: 我有一个Java类,我对从JSON反序列化感兴趣。我已经配置了一个特殊的MixIn类,以帮助我进行反序列化。只有和实例变量与适当的getter和setter方法相结合。看起来像这样: 在我的测试客户端中,我执行以下操作,但是在编译时它当然不起作用,因为与类型不匹配有关。 我知道我可以通过创建一个仅包含一个“响应”对象的方法来缓解此问题,但是随后我将不得不为我想返回的每种类型创建这些有点

  • 我正在调用一个返回JSON的endpoint,它看起来像这样(在Postman中): 此请求返回的Content-Type头是(与通常的 类来自外部库(编写这个endpoint的人)。无论如何,当我试图通过< code > rest template . exchange()调用这个endpoint时,Jackson都无法将这个JSON反序列化为一个有效的< code>Result类。我正在这样做

  • 问题内容: 嗨,我需要使用Jackson数据格式XMLMapper从JAVA创建XML。XML应该像 但我总是喜欢使用额外的“ <地址> 问题答案: 试试下面的代码

  • 问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;

  • 我有一个包含地图(非字符串键)和其他一些字段的类。 我想使用 Jackson 序列化和反序列化这个类。我看到了一种不同的方法,并决定尝试使用jackson模块。 我关注了这篇文章,并扩展了JsonDeserializer和JsonSerializer。问题是这些类应该是类型化的,所以看起来应该是这样的 KeySerializer也是如此。 然后添加到模块: 但这显然是错误的,因为我得到了一个例外:

  • 问题内容: 我想将日期从Twitter反序列化为。我的程序在反序列化领域失败。 我的网域课程 我的解析方法 两项测试均失败,并出现java.time.ZonedDateTime 错误。 我已经检查了关于Stackoverflow的类似问题,我的格式看起来正确。 我做错了吗? 解决了 问题出在地区。添加确切的区域设置后,测试开始通过。 对于 用于测试 问题答案: 尝试在您的媒体资源上添加此注释