我正在尝试验证我的数据对象,但即使传递了无效的输入,也没有收到任何错误
下面的类用于违规检查。
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();
}
}
}对象类
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依赖项。
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'我有多个数据对象需要根据需求进行验证,类似于上面的数据对象。然而,问题是所有的约束验证都不起作用。
方法调用验证函数。
@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());
}不知道我是不是错过了什么。任何帮助都将不胜感激。
发布于 2021-03-03 15:35:49
问题现在已得到解决。问题出在validate方法上。使用下面的方法可以很好地工作。
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();
}
}感谢大家的宝贵意见。
https://stackoverflow.com/questions/66445718
复制相似问题