Spring 验证字符串值是 JSON
Spring validate string value is a JSON
我的配置文件中有一些值,应该是 JSON(将作为字符串加载)。
我想 Spring 在注入之前验证这个值确实是有效的 JSON 并抛出错误。
我已经阅读了存在的验证注释,例如 - @NotNull
、@Size
、@Min
、@Max
、@Email
、@NotEmpty
等
有什么方法可以创建自定义验证器吗?
我想要一个尝试将字符串转换为 JSON 的验证器,如下例所示:How to convert jsonString to JSONObject in Java.
这不是由可用的验证注释提供的,因此您必须寻求自定义实现。该任务分为 2 个简单步骤:
1.给定的字符串是否为 JSON 格式
有多个库能够解析(因此验证)字符串是否遵循 JSON 语法标准。让我们以我最喜欢的 GSON 为例(有 many)。这取决于你目前使用的是什么库:
String string = "{\"foo\":\"bar\"}"
JsonParser jsonParser = new JsonParser();
try {
jsonParser.parse(string); // valid JSON
} catch (JsonSyntaxException ex) {
/* exception handling */ // invalid JSON
}
2。自定义验证注释
从提供启用验证的依赖项开始:
- groupId:
org.hibernate
- artifactId:
hibernate-validator
创建用于验证的注释:
@Documented
@Constraint(validatedBy = JsonStringValidator.class)
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonString {
String message() default "The String is not in JSON format";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
...和验证器通过注解处理验证:
public class JsonStringValidator implements ConstraintValidator<JsonString, String> {
@Override
public void initialize(JsonString jsonString) { }
@Override
public boolean isValid(String string, ConstraintValidatorContext context) {
// Use an implementation from step 1. A brief example:
try {
new JsonParser().parse(string);
return true; // valid JSON, return true
} catch (JsonSyntaxException ex) {
/* exception handling if needed */
}
return false; // invalid JSON, return false
}
}
用法非常简单:
@JsonString
private String expectedJsonString
此实现在 Baeldung's 中有详细描述。
我的配置文件中有一些值,应该是 JSON(将作为字符串加载)。
我想 Spring 在注入之前验证这个值确实是有效的 JSON 并抛出错误。
我已经阅读了存在的验证注释,例如 - @NotNull
、@Size
、@Min
、@Max
、@Email
、@NotEmpty
等
有什么方法可以创建自定义验证器吗?
我想要一个尝试将字符串转换为 JSON 的验证器,如下例所示:How to convert jsonString to JSONObject in Java.
这不是由可用的验证注释提供的,因此您必须寻求自定义实现。该任务分为 2 个简单步骤:
1.给定的字符串是否为 JSON 格式
有多个库能够解析(因此验证)字符串是否遵循 JSON 语法标准。让我们以我最喜欢的 GSON 为例(有 many)。这取决于你目前使用的是什么库:
String string = "{\"foo\":\"bar\"}"
JsonParser jsonParser = new JsonParser();
try {
jsonParser.parse(string); // valid JSON
} catch (JsonSyntaxException ex) {
/* exception handling */ // invalid JSON
}
2。自定义验证注释
从提供启用验证的依赖项开始:
- groupId:
org.hibernate
- artifactId:
hibernate-validator
创建用于验证的注释:
@Documented
@Constraint(validatedBy = JsonStringValidator.class)
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonString {
String message() default "The String is not in JSON format";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
...和验证器通过注解处理验证:
public class JsonStringValidator implements ConstraintValidator<JsonString, String> {
@Override
public void initialize(JsonString jsonString) { }
@Override
public boolean isValid(String string, ConstraintValidatorContext context) {
// Use an implementation from step 1. A brief example:
try {
new JsonParser().parse(string);
return true; // valid JSON, return true
} catch (JsonSyntaxException ex) {
/* exception handling if needed */
}
return false; // invalid JSON, return false
}
}
用法非常简单:
@JsonString
private String expectedJsonString
此实现在 Baeldung's 中有详细描述。