Java中的@QueryParam或HttpServletRequest

时间:2019-05-14 09:29:15

标签: java rest

我有资源类-UserResource接口,并且已将端点定义为getUsers。

现在,我想根据用户状态-(有效,无效)及其非强制性来过滤这些用户,因此,如果我不通过状态,它将提取所有用户。

现在的问题是我应该以 @QueryParam 还是通过

获取
HttpServletRequest - httpServletRequest.getParameter("Status").

以上两种方法中的哪一种是最佳方法,在哪种情况下我应该使用哪种方法。

1。。第一种方法是将状态作为查询参数传递并在资源文件本身中定义。这里的UserResource是控制器接口或资源类。在getUsers方法中具有 @QueryParam

import javax.ws.rs.core.Response;

    @Path(/user)
    public interface UserResource{

          @GET
          @Path("/")
          @Produces({ MediaType.APPLICATION_JSON })
          Response getUsers(@QueryParam("status") String status);

    }

    @Component
    Public class UsersResourceImpl implement UserResource{

    public Response getPlan(String status){

    String userStatus = status;
    // some logic

    } 
}

2。。第二种方法是从HttpServletRequest获取查询参数。所以我有 自动连线HttpServletRequest并从中获取查询参数 httpservlet请求。

import javax.ws.rs.core.Response;

@Path(/user)
public interface UserResource {

    @GET
    @Path("/")
    @Produces({ MediaType.APPLICATION_JSON })
    Response getUsers();

    }

import javax.servlet.http.HttpServletRequest;

@Component
Public class UsersResourceImpl implements UserResource{

    @Autowired
    private HttpServletRequest httpRequest;

    public Response getPlan(String status){

    String status = httpRequest.getParameter(status)
        // some logic
    } 
}
'''

2 个答案:

答案 0 :(得分:1)

好吧,老实说,鉴于您需要查询参数中的值,因此没有任何吸引人的理由可以避免使用@QueryParam注释。

我能想到的使用@QueryParam的一些好处:

  • @QueryParam批注将自动将查询参数的值绑定到资源方法参数,资源类字段或资源类bean属性。因此,一旦遵守documentation中描述的某些规则,您将无需手动提取和解析参数:

      

    带注释的参数,字段或属性的类型T必须是:

         
        
    1. 成为原始类型
    2.   
    3. 具有一个接受单个String参数的构造函数
    4.   
    5. 具有名为valueOffromString的静态方法,该方法接受一个   String自变量(例如,参见Integer.valueOf(String)
    6.   
    7. 已注册了ParamConverterProvider JAX-RS扩展SPI的实现,该扩展实现返回一个ParamConverter实例,该实例能够对该类型进行“从字符串”转换。   为List<T>Set<T>SortedSet<T>,其中T满足以上2、3或4。结果集合是只读的。
    8.   
  • @QueryParam可以与@DefaultValue结合使用,以定义参数的默认值,以防请求中不存在该参数。

  • 如果多个端点支持相同的查询参数,则可以将它们聚合在一个类中,并接收诸如@BeanParameter之类的此类实例。

答案 1 :(得分:0)

使用注释(即@QueryParam),这就是我们选择这种框架的原因,请记住传统的配置方式