在JAXB XmlAdapters中使用注入Spring RESTful Controller

时间:2012-10-08 19:21:36

标签: xml spring rest jaxb

我的应用程序需要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控制器一起使用。

1 个答案:

答案 0 :(得分:3)

您不能将XmlAdapter与Spring的消息转换器关联,而是使用普通的JAXB机制将XmlAdapter注册到您需要的类型:

public class MyRootElement{

   @XmlJavaTypeAdapter(CategoryTypeAdapter.class)
   private Category category;

}

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