我想提供一个全面的 REST API,同时支持JSON
和XML
.
领域模型是复杂类型的,我们注意到,要在同一模型上使用和分别生成友好的JSON
和易于给出可读的 XML或可读的 JSON 1)。XML
MappingJacksonHttpMessageConverter
JaxbMarshaller
最好的方法是什么?
1) 由于映射、根标签和关系等对象的建模方式与 in 不同json
,xml
因此需要对要序列化的对象进行不同的设计,以既 tidyjson
又 tidy xml
。诸如 jaxb 注释之类的实用程序只能做到这一点。
我能想到几个候选人
1) 创建一个 json 和 xml 控制器/模型
public class Controller {
public Foo foo() {
return new Foo();
}
}
public class XmlController extends Controller {
@Override
public XmlFoo foo() {
return new new XmlFoo(super.foo());
}
}
public class JsonController extends Controller {
@Override
public JsonFoo foo() {
return new JsonFoo(super.foo());
}
}
给定一个模型对象,Foo
创建一个JsonFoo
和XmlFoo
2)编写自定义消息转换器
我试过了,结果有点复杂,因为视图必须知道如何解析,例如 aFoo
到 aJsonFoo
才能将其序列化为可读格式。
3)让每个模型对象序列化自己,例如,
public class Foo {
public String serialize(Serializer s) {
return s.serialize(this);
}
}
基于一些仲裁参数让控制器注入正确的序列化器
new Foo(new FooJsonSerializer());
new Foo(new FooXmlSerializer());