我想提供一个全面的 REST API,同时支持JSON和XML.
领域模型是复杂类型的,我们注意到,要在同一模型上使用和分别生成友好的JSON和易于给出可读的 XML或可读的 JSON 1)。XMLMappingJacksonHttpMessageConverterJaxbMarshaller
最好的方法是什么?
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());