轻松休息 +春天 +杰克逊 +贾克斯布
我正在尝试使用 RESTEasy 与 Jackson 序列化 JAXB 带注释的类。默认情况下,ResteasyJacksonProvider 配置为仅使用 JACKSON 注释。有没有办法使用 spring 配置 ResteasyJacksonProvider 以使用 JAXB 注释?有几种编程方式,但如果有一些弹簧配置,我会更喜欢。
我正在考虑的几种方法
使用 ContextResolver for ObjectMapper 类型返回配置为使用 JaxbAnnotationIntrospector 而不是 JacksonAnnotationIntrospector 的
扩展 ResteasyJacksonProvider 并在构建过程中传递 JAXB 注解。
还有其他办法吗?
I am trying to serialize JAXB annotated class with Jackson using RESTEasy. By default ResteasyJacksonProvider is configured to use JACKSON annotation only. Is there a way to configure ResteasyJacksonProvider to use JAXB annotation using spring? There are couple of programmatic ways but would prefer if there is some spring configuration.
Couple of ways I am thinking of
Use ContextResolver for ObjectMapper type to return ObjectMapper configured to use JaxbAnnotationIntrospector instead of JacksonAnnotationIntrospector.
Extend ResteasyJacksonProvider and pass JAXB annotation during construction.
Any other way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好吧,使用 ContextResolver 的第一个选项是有效的,但我仍然认为应该有一种更简单的方法来通过一些配置来做到这一点。
Well the first option of using ContextResolver works but I still think there should be an easier way to do this just by some configuration.
您只需从配置中获取此信息,无需进行任何特殊编程。
以下是如何:
首先正确设置您的配置,我使用 Jackson + JAXB,两者都在 ContentNegotiatingViewResolver bean 下设置:
请注意,在编组器下我设置了 oxm:class-to-be-bound - 这些是要由 JAXB 绑定的类。
现在对于模块,我使用普通注释包(javax.xml.bind.annotation),非编组器特定的。 Jackson Json 和 JAXB 都知道如何阅读它。
例如:
@XmlAccessorType(XmlAccessType.NONE)标签引用;
@XmlRootElement(名称=“页面”)
公共类 PageObject 实现 ComponentTypeObject{
@XmlAttribute(名称=“名称”)
私有字符串名称;
@XmlAttribute(名称=“id”,必需= true)
私有字符串 ID;
@XmlElements({@XmlElement(name="tab", type=TabXmlAdapter.class)})
私有列表
最后,MVC 的控制器需要返回模型和视图:
现在,在调用以 .json 结尾的 URL 时,您将获得 JSON 表示形式,以及 .xml 和 XML 表示形式。如果您在注释模块时给出了正确的映射,则两者都会由查看器翻译。
You can get this from the configuration only, no need to program anything special.
Here's how to:
First set your configuration right, I use Jackson + JAXB, both set under ContentNegotiatingViewResolver bean:
Notice that under the marshaller I set the oxm:class-to-be-bound - those are the classes to be bound by JAXB.
Now for the module, I used ordinary annotation package (javax.xml.bind.annotation), non marshaller specific. Jackson Json and JAXB both know how to read it.
For example:
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name="page")
public class PageObject implements ComponentTypeObject{
@XmlAttribute(name="name")
private String name;
@XmlAttribute(name="id",required=true)
private String id;
@XmlElements({@XmlElement(name="tab", type=TabXmlAdapter.class)})
private List<TabXmlAdapter> tabRef;
Finally the controller for your MVC needs to return a model and view:
Now while calling your URL ending with .json you'd get the JSON representation, and with .xml - and XML. Both are translated by the viewer, provided you gave the correct mapping when annotating the module.