首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.validation未验证数据对象

javax.validation未验证数据对象
EN

Stack Overflow用户
提问于 2021-03-03 03:15:34
回答 1查看 84关注 0票数 0

我正在尝试验证我的数据对象,但即使传递了无效的输入,也没有收到任何错误

下面的类用于违规检查。

代码语言:javascript
复制
package in.rps.validator;

import in.rps.exception.InvalidRequestException;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;

@Service
public class ObjectValidator  {

private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
private static final Validator validator = factory.getValidator();

public <T> void validate(Object o, Class<T> clazz)  {

    if (clazz.isInstance(o)){

        T request = ((T) clazz);
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(request);
        if (!constraintViolations.isEmpty()){

            throw new InvalidRequestException();
        }

    }else{
        throw new InvalidRequestException();
    }
  }
}

对象类

代码语言:javascript
复制
package in.rps.model.response;

import in.rps.model.Dispute;
import in.rps.model.Metadata;
import lombok.*;
import lombok.experimental.FieldDefaults;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DisputeHandleResponse  {

@NotNull
Metadata metadata;

@NotNull
Response response;

@NotNull
Dispute dispute;

@NotNull
@Pattern(regexp = "^[a-zA-Z0-9]*$")
@Size(min =1, max = 35)
String requestId;
}

下面是我的Gradle依赖项。

代码语言:javascript
复制
    compile("org.springframework.boot:spring-boot-starter-validation:2.3.7.RELEASE")

compile group: 'org.glassfish', name: 'javax.el', version: '3.0.1-b12'
compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'

我有多个数据对象需要根据需求进行验证,类似于上面的数据对象。然而,问题是所有的约束验证都不起作用。

方法调用验证函数。

代码语言:javascript
复制
@CrossOrigin
@PostMapping(path = "/createRequest", produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<Object> createDispute(@RequestBody String request) {

    Gson g = new Gson();
    DisputeResponse d = g.fromJson(request, DisputeHandleResponse.class);
    d.setRequestId(null);
    objectValidator.validate(d, DisputeHandleResponse.class);

    restService.process(uri, "dispute/create", request);

    return ResponseEntity.ok().body(Acknowledgement.builder().build());
}

不知道我是不是错过了什么。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-03-03 15:35:49

问题现在已得到解决。问题出在validate方法上。使用下面的方法可以很好地工作。

代码语言:javascript
复制
public <T> void validate(Object o, Class<T> clazz)  {

    if (clazz.isInstance(o)){
        Set<ConstraintViolation<T>> constraintViolations = validator.validate((T)o);
        if (!constraintViolations.isEmpty()){
            throw new InvalidRequestException();
        }
    }else{
        throw new InvalidRequestException();
    }
}

感谢大家的宝贵意见。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66445718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档