【问题标题】:Using injection in JAXB XmlAdapters for Spring RESTful Controller在 JAXB XmlAdapters 中为 Spring RESTful 控制器使用注入
【发布时间】:2012-09-29 01:55:33
【问题描述】:

我的应用程序需要JAXB XmlAdapter 的实例,例如

public class CategoryTypeAdapter extends XmlAdapter<String, Category> {

    @Autowired
    protected CategoryService categoryService;

    public CategoryTypeAdapter() {
    }

    @Override
    public String marshal(Category v) throws Exception {
        return (v == null) ? null : v.getId();
    }

    @Override
    public Category unmarshal(String v) throws Exception {
        // noop
        if (StringUtils.isBlank(v)) {
            return null;
        }
        // load via service
        return this.categoryService.getCategory(v);
    }
}

问题:如何配置 Spring 的 Jaxb2RootElementHttpMessageConverter 以在适当的 mashaller 中设置此适配器?

我知道有 Spring OXM 库,但我不清楚如何将 OXM 类与注释驱动的 REST 控制器一起使用。

【问题讨论】:

    标签: xml spring rest jaxb


    【解决方案1】:

    您不能将 XmlAdapter 与 Spring 的消息转换器相关联,而是使用正常的 JAXB 机制将此 XmlAdapter 注册为您需要的类型:

    public class MyRootElement{
    
       @XmlJavaTypeAdapter(CategoryTypeAdapter.class)
       private Category category;
    
    }
    

    现在关于如何将CategoryService 注入CategoryTypeAdapter 的问题,有几种方法可以将 Spring 依赖项注入到非 Spring 托管对象中,如果您有 AspectJ 基础架构,可能最简单的方法是在您的适配器上使用 @Configurable 注释。

    【讨论】:

    • 干杯,会试一试。我已经将我的适配器更改为仅返回一个空的 Category 实例,其中仅设置了 id,以防 categoryservice 为空。解析后,我用真正的 mckoy 替换那些虚拟类别实例
    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多