具有@PathVariable和@RequestParam的自定义验证器

时间:2020-03-29 17:36:06

标签: java spring spring-boot spring-mvc

我必须在RestController中验证@PathVariable和@RequestParam,但是那没有发生,请允许我以防万一,如果我必须在xml文件中或其他地方添加一些内容。有人可以让我知道是否遗漏了什么。下面是我的粗略程序。

   @RequestMapping("messages")
    @RestController
    @Validated
    public class MessageResource {

        MessageService service = new MessageService();

        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public String getMessage(@Valid @Test @RequestParam("year") int year,@Valid @Test @QueryParam("start") int start,@Valid @Test @QueryParam("size") int size) {
            return "Hello";
        }

        @GET
        @RequestMapping("/test/{year}/{start}/{size}")
        @Produces(MediaType.APPLICATION_JSON)
        public String getMessage1(@Valid @Test @PathVariable("year") int year,@Valid @Test @PathVariable("start") int start,@Valid @Test @PathVariable("size") int size) {
            return "Hellooooooooo";
        }
    }


import java.lang.annotation.*;
import javax.validation.*;

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = Test.TestImpl.class)
public @interface Test {
    String message() default "error";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

    class TestImpl implements ConstraintValidator<Test, String> {
        @Override
        public void initialize(Test arg0) {
            System.out.println("testingggggggggg");
        }

        @Override
        public boolean isValid(String login, ConstraintValidatorContext arg1) {
            return Integer.parseInt(login) > 10;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您的验证器已定义为使用String类型验证RequestParam或PathParam。您的类型为int,因此不会被触发。

相关问题