在Spring RESTful控制器的JAXB XmlAdapters中使用注入
我的应用程序需要在Spring RESTful控制器的JAXB XmlAdapters中使用注入,xml,spring,rest,jaxb,Xml,Spring,Rest,Jaxb,我的应用程序需要jaxbxmladapter的实例,例如 public class CategoryTypeAdapter extends XmlAdapter<String, Category> { @Autowired protected CategoryService categoryService; public CategoryTypeAdapter() { } @Override public String marsh
jaxbxmladapter
的实例,例如
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);
}
}
公共类CategoryTypeAdapter扩展了XmlAdapter{
@自动连线
受保护类别服务类别服务;
公共类别TypeAdapter(){
}
@凌驾
公共字符串封送处理(类别v)引发异常{
返回值(v==null)?null:v.getId();
}
@凌驾
公共类别解组(字符串v)引发异常{
//努普
if(StringUtils.isBlank(v)){
返回null;
}
//通过服务加载
返回此.categoryService.getCategory(v);
}
}
问题:如何配置Spring的Jaxb2RootElementHttpMessageConverter
,以便在适当的mashaller中设置此适配器
我知道有Spring OXM库,但我不清楚如何将OXM类与注释驱动的REST控制器一起使用。您不能将XmlAdapter与Spring的消息转换器相关联,而是使用普通的JAXB机制将此XmlAdapter注册为您需要的类型:
public class MyRootElement{
@XmlJavaTypeAdapter(CategoryTypeAdapter.class)
private Category category;
}
现在的问题是如何将
CategoryService
注入CategoryTypeAdapter
,有几种方法可以将Spring依赖注入非Spring托管对象,如果您有AspectJ基础设施,最简单的方法可能是在适配器上使用@可配置的
注释。干杯,我会试试的。我已经更改了适配器,以便在categoryservice为null的情况下仅返回一个设置了id的空Category实例。在解析之后,我用真正的mckoy替换这些伪类别实例