1

我有一些 POJO,它们是我正在研究的这个 RESTful API 的基础。但是,我需要在一些响应中包含一些其他信息以使 API 更完整。我真的不想将这些额外的信息放在 POJO 中,而是将其包含在 Web 服务层,就好像它是一样的。

它处理有“约会”的“人”。每个约会只有一个人。

所以,我有一个像 /Patients/1 这样的 RESTful 调用,它基本上抓取了 Person 的 POJO,我目前正在使用 XStream 对其进行序列化并在途中发送它。这很好用,但我想做这样的事情:

<Person> 
<firstName>James</firstName>
 ... other fields ...
<nextAppointment href="/Appointment/12345>2010-02-19</nextAppointment>
<prevAppointment href="/Appointment/12346>2010-01-01</prevAppointemnt>
</Person>

下一个和上一个约会实际上并未包含在 Person POJO 中。我正在寻找一种好的“弹簧方式”来实现这一目标。客户可以执行类似 /Patients/1/PreviousAppointment 和 /Patients/1/NextAppointment 的操作,但我希望减少呼叫量(可能是预优化?),并在他们需要时为他们提供获取更多信息的方法通过使用他的href。

使用 XStreamMarshaller 非常优雅,因为我所做的一切都是将 POJO 或 POJO 列表的视图交给它并处理它。但我需要在他们被送出去之前给他们一些医生。

谢谢!

4

2 回答 2

1

解决您的问题:CREATE A CUSTOMIZEDCONVERTER...

公共类 CustomizedConverter 实现 Converter {

@Override public void marshal(Object source, HierarchicalStreamWriter writer,MarshallingContext context) { ....}

@Override public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {..}

@Override public boolean canConvert(Class clazz) {..}

}

要了解如何将转换器与 Marshaller 一起使用,请参阅

所以基本上 CONVERTER 在 POJO 上工作,并确保我们得到合同中给出的 XML 响应。

于 2010-05-24T15:41:30.237 回答
1

这就是将您的业务对象直接交给编组器的问题——您在他们如何将该对象转换为响应方面几乎没有灵活性。对于自己预先转换对象有一些话要说,这样你就可以获得更多的控制权。

因此,如果您有一个您想要的特定输出结构,那么您需要使用 XStream 构建一个看起来像它的类结构。然后,您将业务对象转换为该类结构,并将其传递给 XStream。

它可能看起来不那么优雅,但是您的系统将不太容易被业务对象模型中的微小更改破坏,您当前的基于 XStream 的系统将是。

于 2010-01-10T10:46:50.553 回答