【问题标题】:spring mvc & hibernate validator: valid jsonspring mvc和hibernate验证器:有效的json
【发布时间】:2017-04-07 12:54:21
【问题描述】:

我想检查我的输入参数是否是有效的 json。它可以是任何东西:地图、字符串、数字等。是否有一些准备好为此使用休眠验证器?

为了更清楚,我正在寻找类似于@Email 的东西。有@Json之类的注解吗?

【问题讨论】:

  • 您的问题与thisthisthis 等其他关于 SO 的问题有何不同?
  • @jannis 这些问题与spring-mvchibernate-validation 无关。
  • 我误读了这个问题。我的错。

标签: java validation spring-mvc hibernate-validator


【解决方案1】:

没有 Json 验证器,但您可以连接自定义验证器

public class Customer {

    @Size(min=2, max=30) 
    private String name;

    @NotEmpty @Email
    private String email;

    @JsonValid
    private String  json;

}

@Documented
@Constraint(validatedBy = JsonValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonValid {


    String message() default "{JsonValid}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

public class JsonValidator implements ConstraintValidator < JsonValid, String > {

 @Override
 public void initialize(JsonValid value) {}

 @Override
 public boolean isValid(String json, ConstraintValidatorContext ctx) {

  ObjectMapper mapper = new ObjectMapper();
  ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  Validator validator = factory.getValidator();

  //validate with your request object
  SimpleFooRequest request = mapper.readValue(
   json, SimpleFooRequest.class);
  Set < ConstraintViolation < SimpleFooRequest >> violations = validator.validate(request);

  return  violations.size() > 0;
 }

}    

【讨论】:

  • 不应该是return violations.size() == 0;吗?
  • mapper.readValue(json, SimpleFooRequest.class); 不会在无效 JSON 上抛出异常吗?我想尝试捕捉这一行并将其用作 JSON 有效性的指示就足够了。
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2019-04-21
  • 2019-11-08
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多