当前位置: 首页 > 知识库问答 >
问题:

具有Java绑定功能的简单模板库

莫骞仕
2023-03-14

我想在模板引擎的帮助下生成有效的JSON。特别是,我希望引擎用一个模型类的属性替换模板中的占位符。引擎应该允许使用转换器来处理复杂的类,如java.util.date。此外,我不想显式地处理模板本身中的列表,而是希望任何类似集合的类型生成有效的JSON数组。

这可以是模板的一个示例:

{
  "uber" :
  {
    "version" : "1.0",
    "data" :
    [
      {
        "rel" : $relations,
        "data" :
        [
          {"name" : "firstname", "value" : $firstname},
          {"name" : "lastname", "value" : $lastname}
        ]
      }
    ]
  }
}

我想从具有relations、firstname和lastname属性的模型中替换此模板中的变量($relations$firstname$lastname)。这也应该适用于嵌套属性。(例如:$address.street)

绑定模型后,JSON可能如下所示:

{
  "uber" :
  {
    "version" : "1.0",
    "data" :
    [
      {
        "rel" : ["person"],
        "data" :
        [
          {"name" : "firstname", "label" : "Firstname", "value" : "Max"},
          {"name" : "lastname", "label" : "Lastname", "value" : "Mustermann"}
        ]
      }
    ]
  }
}

请注意,引擎需要注意在必要时使用引号。

是否有任何模板库可以这样做,或者我需要滚动我自己的库?

我已经查看了以下库:

  • 自由马克
  • 速度
  • StringTemplate

而且我还读了几条线程:

  • 类似于ZPT(属性语言)的Java模板库
  • 呈现JSON的spring模板引擎

然而,我至今没有找到一个令人满意的解决办法。

背景资料:

Uber是领域无关的超媒体格式,它嵌套data元素,以便对数据进行编码。如果您想用jackson这样的库序列化它,这种格式的生成非常麻烦,因为您必须创建大量对象并通过setter嵌套它们,这会导致大量代码,而且非常容易出错。

这就是为什么我想到使用模板来生成输出,并让用户编写一个模板,然后将一个模型绑定到这个模板来生成输出。

共有1个答案

穆旭尧
2023-03-14

我的问题找到了答案:

我对模板中的变量使用以下表示法:$(json.path.to.value)。我已经通过JayWay从JsonPath库中实现了一个自定义谓词,它在JSON中查找符合变量定义的值。

谓词还接受一个documentcontext,它表示模型对象,变量的值应该从该对象中获得。这个文档上下文是通过用jackson序列化模型对象并用JsonPath库重新读取它来创建的。这样,就可以确保插入到模板中的所有令牌都是有效的JSON令牌。

如果谓词找到一个变量,它将提取包含的JsonPath表达式,在提供的documentcontext中查找新值,并覆盖原始JSON中的值。

 类似资料:
  • 本文向大家介绍简单谈谈Vue 模板各类数据绑定,包括了简单谈谈Vue 模板各类数据绑定的使用技巧和注意事项,需要的朋友参考一下 『天下武功,唯快不破』√,这一直是对武学造诣方面的追捧,虽然对于这个丝毫不会;更是对待现实工作不懈渴求,乃至苛求。因为这已不是遁隐修行,而是职场卖命,唯有先快速解决需求,方能攫取更为充盈的时间去深究技术机理,以使臻于更强,更强而优于快,如此优良循环得以形成。言归正传,作为

  • 我无法让它工作: 无法编译,错误消息如下: 无效使用temping-id'运算符*

  • 问题内容: 使用我正在尝试在模板中使用自己的功能之一。不幸的是,我无法使用go模板的功能映射功能。我得到的只是以下错误: 简化的测试用例如下所示(): 我有以下简单模板(): 这是1.1.1。 问题答案: IIRC,必须在解析模板之前定义模板功能图。下面的代码似乎有效。

  • 本文向大家介绍Android自定义控件实现简单写字板功能,包括了Android自定义控件实现简单写字板功能的使用技巧和注意事项,需要的朋友参考一下 先来看看效果图 就是简单的根据手指写下的轨迹去画出内容 一、实现 之前一篇文章里提到了android官方给出的自定义控件需要考虑以下几点: 创建View 处理View的布局 绘制View 与用户进行交互 优化已定义的View 就按照这个步骤来完成今天的

  • 问题内容: 我是Java图形和线程的新手,我正在尝试制作一个游戏(特别是Pong)。这个想法是两个人可以在同一个键盘上玩(即,有两个通过不同键控制的拨盘)。目前,两个玩家都无法同时移动其球拍。 有针对这个的解决方法吗?单独的线程是答案吗? 如果可能的话,我希望这些拨片能够同时(至少在表面上)移动。 更新:似乎使用存储按下的键是最好的选择。我已经做到了(并且可以正常工作),但是我想知道是否其中的任何