Java Spring验证字符串值是一个JSON
我的配置文件中有一些值,应该是JSON(将作为字符串加载) 我希望Spring在注入这个值之前验证它是否确实是一个有效的JSON,并在其他地方抛出一个错误 我已经阅读了关于存在的验证注释,例如-Java Spring验证字符串值是一个JSON,java,json,spring,validation,annotations,Java,Json,Spring,Validation,Annotations,我的配置文件中有一些值,应该是JSON(将作为字符串加载) 我希望Spring在注入这个值之前验证它是否确实是一个有效的JSON,并在其他地方抛出一个错误 我已经阅读了关于存在的验证注释,例如-@NotNull,@Size,@Min,@Max,@Email,@NotEmpty等 有没有办法创建自定义验证器 我需要一个将尝试将字符串转换为JSON的验证器,如以下示例所示:。这不是可用的验证注释提供的,因此您必须使用自定义实现。该任务分为两个简单步骤: 1。是JSON格式的给定字符串 无论是否遵循J
@NotNull
,@Size
,@Min
,@Max
,@Email
,@NotEmpty
等
有没有办法创建自定义验证器
我需要一个将尝试将字符串转换为JSON的验证器,如以下示例所示:。这不是可用的验证注释提供的,因此您必须使用自定义实现。该任务分为两个简单步骤: 1。是JSON格式的给定字符串 无论是否遵循JSON语法标准,都有多个库能够解析(因此验证)字符串。让我们以我最喜欢的GSON为例(有)。这取决于您当前使用的库:
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验证程序
@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 {};
}
这个实现在中有详细描述。我已经如您所说创建了注释和验证器,并尝试按如下方式使用它:
@JsonString@Value(${source.SomeJsonString}”)私有字符串SomeJsonString代码>但是似乎什么都没有发生,验证程序没有被调用..很抱歉在问题中没有提到它。链接中的解决方案的问题是,我在多个类中使用JSON字符串(它被注入到一些不相关的类中),这样做会迫使我重复setter。。。还有其他可能的方法吗?
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