如何验证param实际上是Json,而不仅仅是字符串

我有一个 JsonNode,我接受它作为端点的参数。看起来像这样:


@ApiModelProperty(value = "data", example = "{}", required = true)

@NotNull(message = "data cannot be null")

protected JsonNode data;

我想创建一个名为 的验证器@ValidJson。JsonNode 本身将确保提供给它的信息是有效的 json,所以如果我传递如下内容:


{"data" = "hello",},如果 后面多了一个逗号"hello",就会抛出错误。但是我如何确保我没有得到类似"Hello"JsonNode 的东西,它是有效的 json,因为普通的 String 是有效的 json 表示形式?


我首先想检查字符串是否只是字母数字,如果是,那么我会认为它无效,但显然有人可以传递一个带有符号的字符串,那就没问题了。我能想到的最好的解决方案是检查第一个和最后一个字符分别是{和},JsonNode 会处理其余的事情。但我对 的了解还不够JsonNode,所以也许这里有人有更好的主意?


编辑:


为了更具体地表达我想要的,这里有几个例子:


JsonNode 会处理不正确的 Json。我想对我获取的数据进行一些更严格的验证。我不想接收任何类型的 Json,我想要“真正的”、可序列化的 json,这就是我们所说的 json 时所指的。如果用户传递一个如下所示的字符串:


"Hello" "Hello world" "I'm just a random String that isn't in a key:value structure"


等等,我想抛出一个错误并询问他们以 key:value 结构格式化的 Json,例如:


{

   "key": "value"

}

我正在考虑检查第一个和最后一个字符串值是否分别为{和},正如我在评论中提到的那样,但我认为这太“hacky”,也许有更好的方法。


蓝山帝景
浏览 84回答 2
2回答

繁花不似锦

Jackson 旨在将 JSON 转换为 Java 对象。尽管您的用例可以工作,但它很可能不是很有帮助。如果你真的想使用 JsonNode,Jackson 已经检查它是否是正确的 JSON,否则它会立即抛出异常,因为它无法将其解析为 JsonNode。如果你想要一个JSON 对象,你可以简单地使用 aMap<String, Object>而不是JsonNode。这将处理键值部分。

繁星淼淼

isObject这就是我正在寻找的功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java