如何验证序列化的JSON字符串

时间:2019-03-30 19:27:03

标签: java spring hibernate spring-boot spring-mvc

在我的Spring Rest Endpoint中,我收到JSON作为包装在请求参数中的字符串。我可以使用JSON类的ObjectMapper将JSON字符串反序列化为Object。但是,我想验证对象的属性,即名,姓是否为空或null以及电话号码是否为10位数字以及其他验证方式

我的问题是如何在Spring Boot Rest中实现对对象的验证 在Controller方法中没有@Valid注释

@PostMapping(value = "/saveEmployee")
    public ResponseEntity<?> saveEmployeeDetails(
            @Valid @RequestPart(value = "empData", required = true) String emplRegJSONString,
            @RequestParam("file") MultipartFile uploadFile, BindingResult result) {

        Status status = new Status();
        try {
            LOGGER.info("Request Body is " + emplRegJSONString);
            Long savedEmployeeRegisId = null;
            if (StringUtils.isNotBlank(emplRegJSONString)) {
                EmployeeRegistrationTbl employeeRegistrationTbl = new ObjectMapper().readValue(emplRegJSONString,
                        EmployeeRegistrationTbl.class);

               // VALIDATION SHOULD GO AHEAD HERE ON EmployeeRegistrationTbl object

            }
}

1 个答案:

答案 0 :(得分:0)

您可以使用json-schema-validator project for spring boot on github. 让我们用一个例子来解释。我们尝试到达json对象内的一个节点,如果没有得到该节点,则将使我们的模式验证失败并捕获异常。

public void validate(final ProcessingReport report,
    final  MessageBundle bundle, final FullData data)
    throws ProcessingException
{
    final String value = data.getInstance().getNode().textValue();
    try {
        UUID.fromString(value);
    } catch (IllegalArgumentException ignored) {
        report.error(newMsg(data, bundle, "invalidUUID")
            .put("input", value));
    }
}

您还可以使用正则表达式获得所需的结果。示例也可用。您可以查看json-schema-validator examples on github

的示例