如何在Rapidoid中自定义Xml渲染器

时间:2019-02-05 06:18:04

标签: rapidoid

我对Rapidoid真的很陌生,所以请原谅我的无知。

我们需要生成一个包含属性和文本的soap xml有效负载,如下所示。

<profile xsi:type="ent:Profile" xmlns:ent="http://example.com">
               <city xsi:type="xsd:string">San Francisco</city>
               <country xsi:type="xsd:string">USA</country>
               <email xsi:type="xsd:string">abc@test.com</email>
</profile>

显然,Rapoid上的默认XML渲染不支持JAXB @XmlAttribute和@XmlValue批注。

例如On.post(“ / test”)。xml((Req req)-> new Profile());

给出以下响应:

<Profile>
    <city>
        <type>xsd:string</type>
        <value>1234</value>
    </city>
</Profile>

如果遵循Jaxb批注,则预期响应为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Profile>
    <city xsi:type="xsd:string">1234</city>
</Profile>

我可能可以通过使用纯呈现并手动进行xml编组,以达到所需的结果,如下所示:

        On.post("/test2").plain((SetRakutenKaiinModel b)  ->{
            JAXBContext jaxbContext = JAXBContext.newInstance(Profile.class);

            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            StringWriter stringWriter = new StringWriter();
            marshaller.marshal(new Profile(), stringWriter);
            return stringWriter.toString();
        });

但是想要一种更干净的方法,例如自定义/覆盖默认的XML序列化程序。

非常感谢您的投入。

谢谢

0 个答案:

没有答案