Я пытаюсь проверить JSon, используя валидатор схемы json. Но он возвращает общее сообщение. msgstr " Json не соответствует схеме ". У меня есть HTTP POST REQUEST, который отправляет полезную нагрузку следующим образом:
{"key1": "value1", "key2": "value2", "key3": "value3"}
Если ключ1 и ключ2 отсутствуют. Я хочу, чтобы он выдавал сообщения об ошибках следующим образом:
{{
errorCode :1001,
errorMessage : key1 is missing",
},
errorCode :1002,
errorMessage : key2 is missing"
}
}
Я попытался записать ошибки в файл (файл json, содержащий все предупреждения и сообщения) выглядит примерно так:
{
"level" : "error",
"domain" : "validation",
"keyword" : "required",
"message" : "object has missing required properties ([\"key1\",\"key2\",\"key3\"])",
"required" : [ "key1", "key2", "key3"],
"missing" : [ "key1", "key2"]
}
Это только небольшая часть этого файла. Я должен пройтись по файлу, чтобы получить эту информацию. Есть ли другой способ, я могу выполнить пользовательские проверки и вернуть правильные сообщения об ошибках пользователю.
ИЗМЕНИТЬ 1:
Я создал следующий класс RequestObj:
Открытый класс RequestObj {
@Valid
@NotBlank
@NotNull
private String key1;
@Valid
@NotBlank
private String key2;
@Valid
@NotBlank
private String key3;
@Override
public String toString() {
return "RequestObj [key1=" + key1 + ", key2=" + key2 + ", key3=" + key3 + "]";
}
Это не проверяет key1 как не нуль.
Запрос почтальона:
POST / validate HTTP / 1.1 Хост: localhost: 8081 Тип контента: приложение / json
{"key2": "gg", "key3": "hh"}
Когда я реализую интерфейс валидатора. Я не могу получить доступ к событию мул. Как я получу доступ к json, который мне нужно проверить в этом случае?
2 ответа
Вот как выглядит мой результат после выполнения пользовательских проверок ввода json. Я использовал аннотации JSR-303 для проверки данных.
class Example{
@NotBlank
@Size(min = 3, max = 5)
private String key1;
@Pattern(regexp=".+@.+\\.[a-z]+") // email
private String key2;
private String key3;
}
Затем я написал собственный валидатор и вызвал статическую функцию проверки, передав все значения:
public class ValidationServiceImpl {
public static HashMap<String,String> validate(String key1 , String key2 , String key3) {
HashMap<String,String> result = new HashMap();
Example req = new Example(key1 , key2, key3);
Validator validator;
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
Set<ConstraintViolation<Example>> violations = validator.validate(req);
if(!CollectionUtils.isEmpty(violations)) {
for (ConstraintViolation<Example> violation : violations)
{
String propertyPath = violation.getPropertyPath().toString();
String message = violation.getMessage();
result.put(propertyPath, message);
}
}
return result;
}
}
Результатом является хэш-карта, которая возвращает все нарушения. Регистрация даст вам результат.
Требуются зависимости POM:
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-annotation-processor -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.1.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish/javax.el -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
Если встроенный валидатор JSON не предоставляет необходимую вам валидацию или отчеты об ошибках, тогда вам нужно реализовать свой собственный валидатор в Java. См. Документы о том, как реализовать пользовательский валидатор, расширяя интерфейс Validator, и в своем классе реализации вы можете использовать любую библиотеку Java для проверки JSON, например, Джексон или GSON. Затем вы можете настроить обработка ошибок.
Похожие вопросы
Связанные вопросы
Новые вопросы
mule
Mule - это легкая корпоративная сервисная шина на основе Java (ESB) и платформа интеграции, которая позволяет разработчикам быстро и легко соединять приложения, позволяя им обмениваться данными. Mule позволяет легко интегрировать существующие системы, независимо от различных технологий, используемых приложениями, включая JMS, веб-службы, JDBC, HTTP и другие.