天天看點

JAX-RS 2.0如何驗證查詢參數JAX-RS 2.0如何驗證查詢參數

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/72935228

JAX-RS 2.0如何驗證查詢參數

  • 版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。

在JAX-RS 2.0規範中,要驗證查詢參數并不難,可以通過過濾器ContainerRequestFilter來實作。它還提供了一些可選項,例如使用CDI或EJB的攔截器,或通過@Context注解的HttpServletRequest進行注入。

使用場景:驗證由調用者傳遞的查詢參數

步驟:

  1. 實作過濾器
  2. 從ContainerRequestContext上下文中提取查詢參數
  3. 執行驗證——以适合的響應狀态(和錯誤消息)中止請求

    @Provider

    @QueryParamValidator

    public class JAXRSReqFilter implements ContainerRequestFilter {

    @Override

    public void filter(ContainerRequestContext requestContext) throws IOException {

    MultivaluedMap < String, String > queryParameters = requestContext.getUriInfo().getQueryParameters();

    String queryParam = queryParameters.keySet().stream().findFirst().get();

    System.out.println(“Query param - ” + queryParam);

    if (!queryParam.equals(“p”)) {

    requestContext.abortWith(Response

    .status(Response.Status.BAD_REQUEST)

    .entity(“Invalid Query Param ” + queryParam)

    .build());

    }

    }

    }

強制過濾器

  • 使用@NameBinding注解來修飾自定義的注解
  • 在JAX-RS的方法上使用自定義的注解

    @NameBinding

    @Retention(RetentionPolicy.RUNTIME)

    @Target({ElementType.TYPE, ElementType.METHOD})

    public @interface QueryParamValidator {

    // do something

    @Path(“test”)

    public class TestResource {

    @GET

    @QueryParamValidator

    public String test(@QueryParam(“p”) String p){

    return “Param “+ p + ” on ” + new Date();

繼續閱讀