我的应用程序需要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控制器一起使用。
答案 0 :(得分:3)
您不能将XmlAdapter与Spring的消息转换器关联,而是使用普通的JAXB机制将XmlAdapter注册到您需要的类型:
public class MyRootElement{
@XmlJavaTypeAdapter(CategoryTypeAdapter.class)
private Category category;
}
现在关于如何将CategoryService
注入CategoryTypeAdapter
的问题,有几种方法可以将Spring依赖注入到非Spring托管对象中,如果你有AspectJ,可能是最简单的方法基础架构将在适配器上使用@Configurable
注释。