我正在开发一个使用 Spring MVC 的 REST API。我消费和生产的对象是从 NCPDP ( http://www.ncpdp.org/ ) XSD 生成的(使用 JAXB)。当收到请求时,一切正常,但我想在传出请求时向根元素添加额外的属性。
现在,我的外发回复如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport">
<transport:Header>
...
</transport:Header>
<transport:Body>
<transport:Status>
<transport:Code>010</transport:Code>
<transport:Description>OK</transport:Description>
</transport:Status>
</transport:Body>
</transport:Message>
它应该如下所示:
<?xml version="1.0"?>
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport" xmlns:datatypes="http://www.ncpdp.org/schema/datatypes"
xmlns:script="http://www.ncpdp.org/schema/script" xmlns:structures="http://www.ncpdp.org/schema/structures"
xmlns:pa-structures="http://www.ncpdp.org/schema/pa-structures" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
StructuresVersion="v2014041" ECLVersion="v2014041" DatatypesVersion="v2014041" PA-StructuresVersion="v2014041"
TransactionVersion="v2014041" TransportVersion="v2014041" TransactionDomain="SCRIPT">
<transport:Header>
...
</transport:Header>
<transport:Body>
<transport:Status>
<transport:Code>010</transport:Code>
</transport:Status>
</transport:Body>
</transport:Message>
我认为我不需要定义所有命名空间(因为它们未被使用),但我确实需要 StructuresVersion 和所有其他属性。有没有办法修改我的 bindings.xjb 以包含这些属性?还是我必须将生成的代码复制到我的源代码树中并添加注释才能执行此操作?
谢谢,
马特
最佳答案
由于这些属性是在您的 XML 模式中声明的,因此您应该在您的模式派生代码中获得适当的属性。
实际上,这是根元素还是某个子元素并不重要。请重新检查生成的代码,查找类似 getStructuresVersion()
的代码。因此您无需执行任何操作。
至于 namespace ,您将在编码时自动声明它们。但是您可能首先将它们声明为 ns0
、ns1
等,这在可读性方面不是很好。请看下面的问题:
Controlling namespace prefixes in JAXB
(问题本身,而不是答案)以获取有关如何使用自定义前缀映射器或 this post 控制这些前缀的信息。 Blaise Doughan 着。
关于spring-mvc - 当类由 JAXB 生成时,如何向根元素添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431075/