2

我的应用程序需要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);
    }
}

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

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

4

1 回答 1

3

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

public class MyRootElement{

   @XmlJavaTypeAdapter(CategoryTypeAdapter.class)
   private Category category;

}

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

于 2012-10-08T22:02:34.227 回答