Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring验证字符串值是一个JSON_Java_Json_Spring_Validation_Annotations - Fatal编程技术网

Java 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

我的配置文件中有一些值,应该是JSON(将作为字符串加载)

我希望Spring在注入这个值之前验证它是否确实是一个有效的JSON,并在其他地方抛出一个错误

我已经阅读了关于存在的验证注释,例如-
@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