0
私はJersey User Guide - bean-validationのステップを踏んで、以下をpom.xmlに追加します。制約ジャージ2の注釈が機能しない
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.22.2</version>
</dependency>
は、それから私は、APIで
@Path("shows")
public Response getShows(
@NotNull @QueryParam("cid") Long cid,
@Valid @QueryParam("sort_by") @ValidSortBy(modalClass=Show.class) List<String> sortBy,
@QueryParam("limit") @DefaultValue("100") @Max(1000) int limit,
@Context UriInfo uriInfo
)
を制約アノテーションを使用しようとしたが、http://0.0.0.0:8080/api/v1/shows?limit=10001が呼び出されたときに@NotNullと@Maxの両方が動作しません。私はその理由を知らない、私は(「SORTBY」パラメータを使用)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidSortByValidator.class)
public @interface ValidSortBy {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<? extends BaseModal>[] modalClass() default {};
}
public class ValidSortByValidator implements ConstraintValidator<ValidSortBy, List<String>> {
Class<? extends BaseModal> modalClass;
@Override
public void initialize(ValidSortBy annotation) {
System.out.println("aaaaaaaaa initialize");
if (annotation.modalClass().length > 0) {
modalClass = annotation.modalClass()[0];
System.out.println(modalClass.getTypeName());
}
}
@Override
public boolean isValid(List<String> sortBy, ConstraintValidatorContext context) {
return false;
}
}
カスタム@ValidSortByと呼ばれるバリデータをしようとしたしかし、たとえ任意の出力はありません。
誰でも私に理由を教えてもらえますか?大いに感謝する!
ResourceConfigのは、このように初期化され、
final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages([package names]);
resourceConfig.property("jersey.config.server.wadl.disableWadl", true);
resourceConfig.property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
registerResourceConfig(resourceConfig); // register some error mappers
ServletContainer servletContainer = new ServletContainer(resourceConfig);
ServletHolder servletHolder = new ServletHolder(servletContainer);
servletHolder.setInitOrder(1);
servletHolder.setInitParameter("jersey.config.server.tracing", "ALL");
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContextHandler.setSessionHandler(new SessionHandler());
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(servletHolder, "/*");
addServletFilters(servletContextHandler);
return servletContextHandler;
この機能を無効にする場所は見つかりませんでしたが、手動で登録すると機能します。 – Cuero