Как проверить, что param на самом деле Json, а не просто строка - PullRequest
1 голос
/ 17 октября 2019

У меня есть 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"
}

Я думал проверить, соответствуют ли первое и последнее значения строки { и } соответственно, как я упоминал в моих комментариях, но я думаю, что это слишком "хаки"и, возможно, мог бы быть лучший метод.

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Как отметил @VinceEmigh в комментариях, isObject - это функция, которую я искал.

1 голос
/ 17 октября 2019

Джексон предназначен для преобразования JSON в объекты Java. Хотя ваш сценарий может работать, он, скорее всего, не очень полезен. Взгляните на https://www.baeldung.com/jackson, это руководство может помочь вам понять Джексона и его преобразование JSON.

Если вы действительно хотите использовать JsonNode, Джексон уже проверит, является ли он правильным JSON, в противном случае он немедленно выдаст исключение, потому что он не сможет разобрать его в JsonNode.

Есливам нужен объект JSON , вы можете просто использовать Map<String, Object> вместо JsonNode . Это будет обрабатывать часть ключ-значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...