У меня есть 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"
}
Я думал проверить, являются ли первое и последнее строковые значения {
и }
соответственно, как я упоминал в своих комментариях, но я думаю, что это слишком "хакерски", и, возможно, может быть лучший метод.
JsonNode
имеетisObject()
, а также другие методы проверки, такие какisArray()
,isNumeric()
иisTextual()
. Это то, что вы ищете? - person Dioxin   schedule 17.10.2019as a param
... Я предполагал, что вы говорите о параметре запроса, но теперь я предполагаю, что вы говорите о теле запроса.... Если это так, вы должны создать класс, который представляет этот json , и Spring будет обрабатывать преобразование (и Spring также будет выдавать ошибки, если оно недействительно) - person RobOhRob   schedule 17.10.2019"hello"
недействителен json... см. json.org - person RobOhRob   schedule 17.10.2019