大家好,又见面了,我是全栈君。
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();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108428.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...