版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/72935228
JAX-RS 2.0如何驗證查詢參數
- 版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。
在JAX-RS 2.0規範中,要驗證查詢參數并不難,可以通過過濾器ContainerRequestFilter來實作。它還提供了一些可選項,例如使用CDI或EJB的攔截器,或通過@Context注解的HttpServletRequest進行注入。
使用場景:驗證由調用者傳遞的查詢參數
步驟:
- 實作過濾器
- 從ContainerRequestContext上下文中提取查詢參數
-
執行驗證——以适合的響應狀态(和錯誤消息)中止請求
@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();