可用的验证注释不提供这一点,因此您必须采用自定义实现。该任务分为 2 个简单步骤:
1.给定的String是否为JSON格式
有多个库能够解析(从而验证)字符串是否遵循 JSON 语法标准。让我们以我最喜欢的 GSON 为例(有many https://stackoverflow.com/questions/10174898/how-to-check-whether-a-given-string-is-valid-json-in-java/10174938)。这取决于您当前使用的库:
String string = "{\"foo\":\"bar\"}"
JsonParser jsonParser = new JsonParser();
try {
jsonParser.parse(string); // valid JSON
} catch (JsonSyntaxException ex) {
/* exception handling */ // invalid JSON
}
2.自定义验证注解
首先提供启用验证的依赖项:
- 组ID:
org.hibernate
- 工件ID:
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
此实现详细描述于拜尔东的 https://www.baeldung.com/spring-mvc-custom-validator.