代码之家  ›  专栏  ›  技术社区  ›  jr. Aikon Mogwai

调整输出的弹簧编组视图?

  •  1
  • jr. Aikon Mogwai  · 技术社区  · 16 年前

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

    它涉及“有预约的人”。每个约会只有一个人。

    所以,我有一个像/patients/1这样的安静的调用,它基本上为这个人抓取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>
    

    下一个和上一个约会实际上不包括在个人POJO中。我正在寻找一个好的“弹簧方式”来实现这一点。客户可以这样做/patients/1/previousappointment和/patients/1/nextap软膏,但我希望减少通话量(可能是预先优化?)如果他们需要更多的信息,可以使用he-href给他们提供一种方法。

    使用XStreamMarshaller是非常优雅的,因为我所做的一切都是将pojo或pojo列表交给视图并由它处理。但我需要在他们被送出去之前先把他们治好一点。

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   skaffman    16 年前

    这是将业务对象直接交给封送处理程序的问题——在如何将该对象转换为响应方面,您几乎没有灵活性。有一些事情要说,预先转换对象自己,你得到更多的控制方式。

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

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

        2
  •  1
  •   abhishek dutta    16 年前

    解决您的问题:创建自定义转换器…

    公共类自定义转换器实现转换器{

    @重写 public void marshal(对象源、层次结构流编写器、marshalingContext上下文)……

    @重写 公共对象解组(HierarchicalStreamReader Reader,解组上下文上下文)..

    @重写 公共布尔值canconvert(class clazz)..

    }

    要知道如何将转换器与封送拆收器一起使用,请参阅 this .

    因此,基本上转换器在POJO上工作,并确保我们得到合同中给出的XML响应。