使用相同表格的不同项目的特定配置

时间:2014-05-08 18:05:39

标签: java json

所以我们有一个ITEMTVLCDPROJECTOR

我们DAO Service objectTV LCDPROJECTORITEM也是extends个对象。意味着这些表都是ITEM API表。

您可以通过UI和API服务访问这些项目。

现在,我需要将与showImageFlag完全不相关的特定UI配置放在一起。假设我需要在UI中为每个项目显示或不显示项目图像的配置,我们称之为SHOW_IMAGE_FLAG。可以从项目的UI中修改此值,这是一个复选框。

我一直在考虑一些选择:

  1. 将一列ITEM添加到DAO表及其@JSonIgnore和服务对象。在服务对象上放置tv标志,以便在API端忽略它,但我们可以在UI中正常使用它。 -------我对这种方法的关注是,将来我们可能需要对这些项目进行更多配置,或者可能需要lcdprojectorITEM_CONFIG (id, item_id, configuration, value)以外的其他项目。所以这总是会促使我们在表中添加一个新列。另一个问题是我们可能正在迁移所有形式的ui以使用REST API,因此我们将不得不对该JsonIgnored属性执行某些操作。

  2. FK表格ITEM已添加到idItemConfig,并使用键/值方法保存与特定项目相关的N配置。因此,在每个Web控制器上,我将传递一个ITEM对象,其中包含与请求的spring mvc相关的所有配置。 --------我对这个问题的关注是,我应该如何将其映射到表单(使用{{1}}),以及当UI上的配置发生变化时我应该如何保持。

  3. 请随意发表评论并为此建议任何新选项。

4 个答案:

答案 0 :(得分:2)

第二点更可行。 此外,您可以拥有另一个服务层,负责保存映射部分和服务层下面的UI控制器层,它实际上将更改映射到其正在进行的表示,即UI层。

答案 1 :(得分:1)

我会考虑将Item(id)--ItemUI(item_id)添加为1:1。

然后,您可以将有关项目的所有UI特定添加到ItemUI属性。

此外,您可以通过第二次调用另一项服务来请求UI配置。

答案 2 :(得分:1)

从这两个选项中,我将排名第一。出现的唯一问题是迁移UI以使用API​​。在这种情况下,您不会使用@JsonIgnore,而是使用Json Views。

您可以创建表示数据特定视图的类,并使用它们使用@JsonView(MyView.class)标记您的属性。最后,您可以使用objectMapper.writeValueUsingView(out, beanInstance, MyView.class);

序列化bean

在您的情况下,您可以创建一个视图类MyAPIView并注释除SHOW_IMAGE_FLAG @JsonView(MyAPIView.class)之外的所有字段(注意MyAPIView是一个用于标记目的的空类,没有逻辑也没有属性。)

如果您致电objectMapper.writeValueUsingView(out, beanInstance, MyAPIView.class);,则不会序列化SHOW_IMAGE_FLAG属性。如果您致电objectMapper.writeValue(out, beanInstance),您将序列化该属性。

您必须在运行时确定要使用的视图。如果您使用的是OAuth,则可以根据所连接的客户端选择视图。

最终,您可以创建多个视图并应用继承。看看jacksons doc

答案 3 :(得分:0)

我最终得到了一个名为ITEM_CONFIG的项目的配置表(ITEM_IDUI_PROPERTIES

UI_Properties我保存JSON字符串,该字符串映射到DAO模型上的字符串属性,但作为服务模型上的HashMap<String, Object>。< / p>

我有一个转换器,将dao模型中的值映射到服务对象上的hasmap,“自动”。

在控制器上(在BaseController中,每个WebController的父[不休息]),我添加了一个从ItemConfigService获取配置的方法,然后使用{{1在响应中设置模型(SpringMVC中的模型) } {}为hasmap key,值为parameter值。

这工作非常干净,自上周以来我们没有任何问题。