首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java中的Json模式验证器获得json中定义的自定义错误消息?

如何使用java中的Json模式验证器获得json中定义的自定义错误消息?
EN

Stack Overflow用户
提问于 2022-08-10 11:26:22
回答 1查看 233关注 0票数 0

如果验证失败,我将在java代码中访问json模式中的自定义错误消息集。但我拿不来。你能帮我找个办法吗?

图书馆插件

代码语言:javascript
复制
  <dependency>
        <groupId>com.networknt</groupId>
        <artifactId>json-schema-validator</artifactId>
        <version>1.0.49</version>
    </dependency>

Json-模式

代码语言:javascript
复制
 "membershipNo": {
      "type": "string",
      "minLength": 1,
      "message": {
        "pattern": "membershipNo should not be empty"
      }
    }

我就是这样获取Java类中的错误的-

代码语言:javascript
复制
JsonSchema schema = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7).getSchema(schemaAsStream);
ObjectMapper om = new ObjectMapper();
    om.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);
    JsonNode jsonNode = om.readTree(payload);
    Set<ValidationMessage> errors = schema.validate(jsonNode);
    for (ValidationMessage error : errors) {
        System.out.println(error.getMessage());
    }

Error Getting- $.payment.membershipNo: must be at least 1 characters long"  
Error Expected - membershipNo should not be empty   
EN

回答 1

Stack Overflow用户

发布于 2022-08-11 10:07:32

根据文档,您可以在json模式本身中提供自定义消息,但不能以您的方式提供。

例如,如果您有这样的JSON模式(带有默认消息):

代码语言:javascript
复制
{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
      "description": "The person's first name."
    },
    "foo": {
      "type": "array",
      "maxItems": 3
    }
  }
}

您可以通过更改上面的JSON模式来定制错误消息,如下所示:

代码语言:javascript
复制
{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
      "description": "The person's first name."
    },
    "foo": {
      "type": "array",
      "maxItems": 3
    }
  },
  "message": {
    "maxItems" : "MaxItem must be 3 only",
    "type" : "Invalid type"
  }
}

在消息字段中,用户可以声明他们的自定义消息。键应该是验证类型,值应该是自定义消息。

代码语言:javascript
复制
"message": {
    [validationType] : [customMessage]
  }

此外,我们还可以使用从ValidationMessage.java类返回的属性(如参数、路径e.t.c )对动态消息进行格式化。

看一看按下

通过这个设置,这一行代码:

代码语言:javascript
复制
 for (ValidationMessage error : errors) {
        System.out.println(error.getMessage());
    }

应该打印您的自定义错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73305460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档