英文:
Is there any chance to validate all the values of the DTO Object is null in Request Body
问题
@Controller......
@PutMapping(value = "/{id}")
public ResponseEntity<JsonNode> editStudent(@PathVariable @Positive(message = "Student id must be Positive Value") Long id, @Valid @ValidRequestBody(DTOClass = StudentDTO.class) @Validated(value = Update.class) @RequestBody(required = true) StudentDTO studentDTO, BindingResult bindingResult) {.....
----------------------------------------------------------------------------
@Documented
@Retention(RUNTIME)
@Target({ TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.MODULE, ElementType.PACKAGE, ElementType.TYPE_PARAMETER, ElementType.TYPE_USE })
@Constraint(validatedBy = RequestBodyValidator.class)
public @interface ValidRequestBody {
String message() default "Required parameter is missing";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<?> DTOClass();
}
-----------------------------------------------------
public class RequestBodyValidator implements ConstraintValidator<ValidRequestBody, Map<String, Object>> {
Class<?> dtoClass = null;
@Override
public void initialize(ValidRequestBody constraintAnnotation) {
this.dtoClass = constraintAnnotation.DTOClass();
}
@Override
public boolean isValid(Map<String, Object> objectNode, ConstraintValidatorContext context) {
Collection<Object> objectValues = objectNode.values();
return !objectValues.stream().allMatch(null);
}
}
英文:
@Controller......
@PutMapping(value = "/{id}")
public ResponseEntity<JsonNode> editStudent( @PathVariable @Positive(message = "Student id must be Positive Value") Long id, @Valid @ValidRequestBody(DTOClass = StudentDTO.class) @Validated(value = Update.class) @RequestBody(required = true) StudentDTO studentDTO, BindingResult bindingResult ) {.....
----------------------------------------------------------------------------
@Documented
@Retention(RUNTIME)
@Target({ TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.MODULE, ElementType.PACKAGE, ElementType.TYPE_PARAMETER, ElementType.TYPE_USE })
@Constraint(validatedBy = RequestBodyValidator.class)
public @interface ValidRequestBody {
String message()
default "Required parameter is missing";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<?> DTOClass();
}
-----------------------------------------------------
public class RequestBodyValidator implements ConstraintValidator<ValidRequestBody, Map<String, Object>> {
Class<?> dtoClass = null;
@Override
public void initialize( ValidRequestBody constraintAnnotation ) {
this.dtoClass = constraintAnnotation.DTOClass();
}
@Override
public boolean isValid( Map<String, Object> objectNode, ConstraintValidatorContext context ) {
Collection<Object> objectValues = objectNode.values();
return !objectValues.stream().allMatch( null );
}
}
答案1
得分: -1
你可以在DTO的所有字段上使用@Valid或@NonNull注解。因此,如果一个字段接收到null或空值,将会抛出异常。
英文:
You can use @Valid or @NonNull annotation on all fields in your DTO. So, if a field is received as null or empty, exception would be thrown.
专注分享java语言的经验与见解,让所有开发者获益!
评论