JavaJacksonXML base64编码标记序列化器

c86crjj0  于 7个月前  发布在  Java
关注(0)|答案(1)|浏览(111)

我试图将包含base64编码标记的xml转换为对象
以下是API响应数据的示例:

<WebResponse>
    <RequestId>6541635537</RequestId>
    <Items>
        <Item>
            <Id>1aSd</Id>
            <Name>spider</Name>
        </Item>
        <Item>
            <Id>2sze</Id>
            <Name>catman</Name>
        </Item>
    </Items> <Customer>PEN1c3RvbWVyPg0KIDxOYW1lPk5pY288L05hbWU+DQogPEFjY291bnRzPg0KICA8QWNjb3VudD4NCiAgIDxUeXBlPlBSTzwvVHlwZT4NCiAgPC9BY2NvdW50Pg0KICA8QWNjb3VudD4NCiAgIDxUeXBlPlBST01BWDwvVHlwZT4NCiAgPC9BY2NvdW50Pg0KIDwvQWNjb3VudHM+DQo8L0N1c3RvbWVyPg==</Customer>
</WebResponse>

如果你解码客户块,你会得到:

<Customer>
 <Name>Nico</Name>
 <Accounts>
  <Account>
   <Type>PRO</Type>
  </Account>
  <Account>
   <Type>PROMAX</Type>
  </Account>
 </Accounts>
</Customer>

我想做的是在序列化之前先解码Customer块。
这是我一直以来所尝试做的:

ObjectMapper MAPPER = new XmlMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
WebResponse result = MAPPER.readerFor(WebResponse.class).readValue(webResponse);

我在尝试时得到了这个例外:线程“main”出现异常com.fasterxml.Jackson.databind.exc.MismatchedInputException:无法构造组织客户的示例(尽管至少存在一个创建者):无字符串参数
任何提示都欢迎。这是我们的课程:link => MainMapper.class拥有启动测试的main方法。
谢谢你

s1ag04yj

s1ag04yj1#

你用的是Jsonnelialiser。你有XML。在属性上使用@ JsonToolialize注解设置自定义JsonToolializer。在我看来,jackson-dataformat-xml没有annotation,或者你不能用XmlMapper设置一个自定义的解析器。但也许有可能。
我会这么做

  • 使用SAXParser读取响应
  • 解码base64字符串。
  • 使用SAXParser替换为已解码的XML
<WebResponse>
    <RequestId>6541635537</RequestId>
    <Items>
        <Item>
            <Id>1aSd</Id>
            <Name>spider</Name>
        </Item>
        <Item>
            <Id>2sze</Id>
            <Name>catman</Name>
        </Item>
    </Items>
    <Customer>
        <Name>Nico</Name>
        <Accounts>
            <Account>
                <Type>PRO</Type>
            </Account>
            <Account>
                <Type>PROMAX</Type>
            </Account>
        </Accounts>
    </Customer>
</WebResponse>

然后可以使用Jackson将此XML格式化。

相关问题