当前位置: 首页 > 知识库问答 >
问题:

RESTAPI的Spring验证程序只能部分工作

拓拔君博
2023-03-14

我使用的是Spring Boot 1.5.3。释放我试图用org验证Spring Boot REST api。springframework。验证。验证器。Spring validator有几种验证实体的方法,所以当我调用

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required");

一切正常,请求失败,出现验证错误,但当我进一步执行不同的验证时

if (!StringUtils.isAllLowerCase(request.getId())) {
  errors.rejectValue("id", "Id should be lowercase");
}

虽然实际执行了代码并调用了rejectValue方法,但没有发生任何事情,但由于某些原因,请求的处理并没有停止。

所以问题是为什么验证没有发生,也许有不同的方法通过Spring/Spring-Boot执行验证。我有很多复杂的验证,所以我尽量避免使用JSR-303,并创建大量的自定义注释。

请求验证程序

import com.user.model.TenantRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

@Component
public class TenantRequestValidator implements Validator {

@Override
public boolean supports(Class<?> clazz) {
    return TenantRequest.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required");

    TenantRequest request = (TenantRequest) target;

    if (!StringUtils.isAllLowerCase(request.getId())) {
      errors.rejectValue("id", "Id should be lowercase");
    }


}
}

共有1个答案

濮阳弘扬
2023-03-14

提供有关租户请求的详细信息。JAVA

可能现在您可以尝试删除@Component,因为您正在实现验证器,所以不需要它。

参考我创建的工作示例https://github.com/Roshanmutha/rcmutha-SpringFormUIValidation/blob/master/src/main/java/com/rcmutha/SpringInputValidation/EmployeeFormValidator.java

你也在控制器中添加了以下内容吗?

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new EmployeeFormValidator());
}
 类似资料:
  • 波姆。xml就是这样。在spring boot starter web中,它已经具有hibernate验证程序依赖性。 类请求 ################################################################################## 控制器 我错过什么了吗?验证不起作用。我是学习者。有人能帮我吗?

  • 我们还发现Identity Toolkit API检测到了许多错误,所以我们试图添加登录、注销和电子邮件的URL,但当试图保存时没有发生什么。 我们错过了什么?

  • 我正在开发spring mvc应用程序,我应该在spring mvc validator的基础上应用验证。第一步,我为类和设置控制器添加了注释,效果很好。现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释并添加额外的检查。 我的用户类: 我的验证器: 我的控制器: 那么,有可能同时使用自定义验证器和注释吗?如果是,怎么做?

  • 我正在创建一个非常简单的验证码验证过程。

  • 我正在将应用程序的安全性迁移到Spring Security4.0。我的要求是身份验证应该是JAAS身份验证,自动化数据将从数据库中提取。所以我已经编写和自定义了身份验证提供程序。但我的问题是Spring没有将身份验证请求委托给我的自定义身份验证提供程序。 代码如下 web.xml条目 调用堆栈

  • 我有一个Spring Boot服务,它需要验证不同rest路由中的多部分最大文件大小,例如所有v1路由的5MB和v2路由的10MB 下面已经设置了,但所有请求都将根据它进行验证,包括v1路由 我在想实施它的最佳方式是什么。 > 它是否在应用程序级别将最大10MB限制保持为上述一般值,并且在每个路由中使用MultipartFile getSize()方法进行验证 还有其他更好的方法可以通过检查请求路