gpt4 book ai didi

java - 如何手动触发对象的自定义注释验证规则?

转载 作者:行者123 更新时间:2023-12-02 01:42:33 25 4
gpt4 key购买 nike

我需要手动或在 json 字符串到对象转换期间触发对象上的自定义 validator 。

我的 dto 如下所示:

@NotNullable.List({
@NotNullable(enumMessage = RequiredFieldErrors.NAME_REQUIRED, fieldName = "info.personName")
//More
})

@SpecificValue.List({
@SpecificValue(enumMessage = BusinessErrors.CONFIDENTIALITY_REQUESTED, fieldName = "info.personName.confidentialityRequested", value = ConstantValue.CONFIDENTIALITY_VALUES)
//More
})

@DependentField.List({
@DependentField(
parentFieldName = "info.personDemographics.ssnUnknown",
parentFieldValue = "false",
childFieldNames = {"info.personDemographics.ssn"},
childFieldValues = {ConstantValue.SSN_PATTERN},
includeChildValues = true,
enumMessage = RequiredFieldErrors.PAYEE_SSN_MUST_BE_NUMERIC)
//More
})

public class MyClass implements Serializable {
private static final long serialVersionUID = 1L;
@SpecificValue(enumMessage = BusinessErrors.SOURCE_ID_INVALID, value = ConstantValue.SOURCE_ID)
private String sourceId;
@NotNullable(enumMessage = RequiredFieldErrors.INFO_REQUIRED)
private PersonType info;
//More
}

在上面的代码中,PersonType 是由其他对象类型组成的。再次对这些对象进行验证。

这种方式工作正常。

@RequestMapping(value = "/api/rest/uploadefile", method = {RequestMethod.POST}
public ResponseEntity<Object> upload1(@Valid @RequestBody MyClass request, BindingResult bindingResult, HttpServletRequest request) {
if(bindingResult.hasErrors()) {
throw new FieldValidationException(Contstants.INVALID_REQUEST, errors);
}
}

我需要以字符串形式获取 json 请求。我知道 @Valid @RequestPart ....,对于多部分/混合类型来说效果很好。我想要这样的东西:

@RequestMapping(value = "/api/rest/uploadefile", method = {RequestMethod.POST}, headers = {"content-type=multipart/form-data"})
public ResponseEntity<Object> upload1(@RequestPart(value = "request", required = true) String request, @RequestPart(value = "file", required = true) List<MultipartFile> file, Errors errors) throws Exception {
ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(request, MyClass.class);
ValidationUtils.invokeValidator(validator1, myClass, errors);
if(errors.hasErrors()) {
throw new FieldValidationException(Contstants.INVALID_REQUEST, errors);
}
}

我尝试使用 springframework validator 和 javax jsr validator 。他们都没有工作。我收到以下错误:

class java.lang.IllegalStateException JSR-303 validated property 'info.personName' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean property versus direct field access

对于以下请求:

curl -i -X POST -myURL -H "Authorization: ABC" -F request={} -F file=@view.pdf

我的 validator 实现 javax.validation.ConstraintValidator 如下:

public class DependentFieldValidator implements ConstraintValidator<DependentField, Object> {
//My code
}

最佳答案

您用于验证的Errors不是应该使用的Errors

如果您使用手动创建的错误,它应该可以工作:

BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(myClass, "myClass");
ValidationUtils.invokeValidator(validator, myClass, bindingResult);

请注意BeanPropertyBindingResult实现错误

关于java - 如何手动触发对象的自定义注释验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com