未调用自定义注释的java类验证(约束类)
我最近开始做自定义注释。我创建了一个示例spring boot项目,它可以正常工作,但当我尝试与项目代码集成时,验证类没有被调用
验证场。爪哇
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Documented
@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Constraint(validatedBy = { RequestDataValidator.class })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ValidateField {
String message() default "invalid or value not present";
int revision() default 1;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
RequestDataValidator。爪哇
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class RequestDataValidator implements ConstraintValidator<ValidateField, String>{
@Override
public void initialize(ValidateField constraintAnnotation) {
System.out.println("in Initialize method");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("in Initialize method");
return (value != null && !value.isEmpty());
}
}
控制器类如下所示。 请注意,@Valid注释与@RequestBody一起使用
import javax.validation.Valid;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.springframework.web.bind.annotation.RequestBody;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@Api
@Produces({MediaType.APPLICATION_JSON})
@Path("/service")
public interface UIController {
@POST
@Path("/getRules")
@Produces({MediaType.APPLICATION_JSON})
@ApiOperation(
value = "Respond Hello <name>!",
response = Response.class
)
@ApiResponses(
value = {
@ApiResponse(code = 404, message = "Service not available"),
@ApiResponse(code = 500, message = "Unexpected Runtime error")
})
public Response getRules(@Valid@RequestBody SampleRequest discountPromoDetailsRequest);
}
我已经检查了注释是否应用于该字段。事实证明确实如此。我用电脑检查了一下
field.getDeclaredAnnotations()
是的。爪哇
public class SampleRequest {
private String name;
@ValidateField
private String lastName;
private Long phNum;
private String address;
.
.
//getters and setters of the same.
}
我现在不确定RequestDataValidator没有被调用的原因是什么
我在过去三天里一直在做这件事,但我仍然没有在项目中工作
非常感谢您的帮助
共 (0) 个答案