有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未调用自定义注释的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) 个答案