Spring Data Rest:如何使 json 架构属性成为必需?

Mik*_*e R 5 java json jsonschema jackson spring-data-rest

通过阅读另一个问题,我了解到 Spring Data Rest 在以下位置公开了 JSON 模式:/{resourceName}/schema。前任:

获取 http://localhost:8080/members/schema
接受:应用程序/架构+json
{
    "name": "org.jxc876.model.Member",
    "description": "rest.description.member",
    “链接”:[],
    “特性”: {
        “ID”: {
            “类型”:“长”,
            "description": "rest.description.member.id",
            “必需”:假
        },
        “别名”:{
            “类型”:“字符串”,
            "description": "rest.description.member.alias",
            “必需”:假
        },
        “姓名”: {
            “类型”:“字符串”,
            "description": "rest.description.member.name",
            “必需”:假
        }
    }
}

我想指出某些字段是必需的。我最初尝试使用 Bean Validation 注释 (@NotNull) 和 Jackson (@JacksonProperty) 注释,但似乎都没有触发该标志。

注意:我使用的是 Spring Data Rest 2.2.1

Mik*_*e R 1

我查看了源代码,发现:

  • RepositorySchemaController - 映射到 /{repository}/schema
  • 持久实体到JsonSchema转换器
    • 包含一个 Convert(Object, TypeDescriptor, TypeDescriptor) 方法,用于创建 Json 模式
    • 使用另一个类JsonSchema及其嵌套内部类(Property)
    • 该属性包含 3 个字段:类型、描述、必填
    • 看起来构造函数调用被硬编码为始终使用 false:new Property(type, message, false)

我想我应该扩展 PersistentEntityToJsonSchemaConverter 并重写转换方法,然后还重写控制器并调用我的自定义 JsonSchemaConverter。

  • SDR生成的模式不符合JSON模式。然而,[JIRA](https://jira.spring.io/browse/DATAREST-354) 请求支持 JSON Schema 和 Hyper Schema,这是正确的方法。我建议您对票进行投票/评论,以将其推入队列。 (2认同)