在基于Spring的REST服务中表示对象视图(摘要,详细信息,完整等)的最佳方式

时间:2014-01-13 20:35:57

标签: spring rest

我正在使用Spring 4.x的REST服务。根据要求,我必须从同一个对象产生几个不同的视图。示例URI:

要获取位置服务的完整详细信息:/services/locations/{id}/?q=view:full 要获取位置服务摘要:/services/locations/{id}/?q=view:summary

我想到了这个问题的两种解决方案: 1.为不同的视图创建不同的对象。 2.创建相同的对象,但根据某些配置过滤掉字段(如下所示) location_summary_fields = field1,field2 location_detail_fields = field1,field2,field3

有人可以帮我理解什么是理想的解决方案吗?我不知道有任何标准做法可以解决这类问题。

谢谢, NN

2 个答案:

答案 0 :(得分:1)

在我看来,最好的选择是为不同的视图使用单独的POJO。记录它要容易得多(例如,当您使用Swagger等自动化工具时)。另外你要记住你的应用程序会在一段时间后发生变化,然后有一个共同的POJO可能会造成麻烦 - 那么你需要在一个服务中添加一个字段而不要通过另一个服务暴露它。

答案 1 :(得分:0)

请参阅此文章,了解google gson如何使用注释将Java Object表示转换为json格式:http://www.javacreed.com/gson-annotations-example/

由于您需要为同一个对象提供两种不同的表示形式,因此您可以自行滚动

toJson method as follows :
a) Annotate each field of you model with either @Summary, @Detail or @All
b) Implement a toJson() method that returns a json representation by examining the annotations for the fields and appropriately using them

If you need an XML representation same thing, except you would have a toXML().