У меня есть 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, поскольку нормальная строка является допустимым представлением 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"
И т. Д., Я хочу выдать ошибку и запросить Json, отформатированный в структуре key: valueнапример:
{
"key": "value"
}
Я думал проверить, соответствуют ли первое и последнее значения строки {
и }
соответственно, как я упоминал в моих комментариях, но я думаю, что это слишком "хаки"и, возможно, мог бы быть лучший метод.