Chi*_*hak 5 java validation spring json annotations
我的配置文件中有一些值,它应该是 JSON(它将作为字符串加载)。
我希望 Spring 在注入之前验证该值确实是有效的 JSON,否则会抛出错误。
我已经阅读了现有的验证注释,例如 - @NotNull、@Size、@Min、@Max、@Email等@NotEmpty。
有没有办法创建自定义验证器?
我想要一个验证器尝试将字符串转换为 JSON,如以下示例所示:How to conversion jsonString to JSONObject in Java。
可用的验证注释不提供这一点,因此您必须采用自定义实现。该任务分为 2 个简单步骤:
1.给定的String是否为JSON格式
有多个库能够解析(从而验证)字符串是否遵循 JSON 语法标准。让我们以我最喜欢的 GSON 为例(有很多)。这取决于您当前使用的库:
String string = "{\"foo\":\"bar\"}"
JsonParser jsonParser = new JsonParser();
try {
jsonParser.parse(string); // valid JSON
} catch (JsonSyntaxException ex) {
/* exception handling */ // invalid JSON
}
Run Code Online (Sandbox Code Playgroud)
2.自定义验证注解
首先提供启用验证的依赖项:
org.hibernatehibernate-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 {};
}
Run Code Online (Sandbox Code Playgroud)
...以及验证器通过注释处理验证:
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
}
}
Run Code Online (Sandbox Code Playgroud)
用法非常简单:
@JsonString
private String expectedJsonString
Run Code Online (Sandbox Code Playgroud)
Baeldung 的中详细描述了此实现。
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |