Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@java中的QueryParam或HttpServletRequest_Java_Rest - Fatal编程技术网

@java中的QueryParam或HttpServletRequest

@java中的QueryParam或HttpServletRequest,java,rest,Java,Rest,我有一个resource类-UserResource接口,并将端点定义为getUsers 现在,我想根据用户状态(活动、非活动)筛选这些用户,并且它不是必需的,因此如果我不通过状态,它将获取所有用户 现在的问题是,我应该将其作为@QueryParam传递还是从 HttpServletRequest-HttpServletRequest.getParameter(“状态”)。 以上两种方法中的哪一种是最好的方法,在什么情况下我应该使用哪一种 1。第一种方法是将状态作为查询参数传递,并在资源文件本

我有一个resource类-UserResource接口,并将端点定义为getUsers

现在,我想根据用户状态(活动、非活动)筛选这些用户,并且它不是必需的,因此如果我不通过状态,它将获取所有用户

现在的问题是,我应该将其作为@QueryParam传递还是从

HttpServletRequest-HttpServletRequest.getParameter(“状态”)。
以上两种方法中的哪一种是最好的方法,在什么情况下我应该使用哪一种

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

导入javax.ws.rs.core.Response;
@路径(/user)
公共接口用户资源{
@得到
@路径(“/”)
@产生({MediaType.APPLICATION_JSON})
响应getUsers(@QueryParam(“status”)字符串状态);
}
@组成部分
公共类UsersResourceImpl实现UserResource{
公共响应getPlan(字符串状态){
字符串userStatus=status;
//一些逻辑
} 
}
2.第二种方法是从HttpServletRequest获取查询参数。所以我有 自动连接HttpServletRequest并从 httpservletrequest

导入javax.ws.rs.core.Response;
@路径(/user)
公共接口用户资源{
@得到
@路径(“/”)
@产生({MediaType.APPLICATION_JSON})
响应getUsers();
}
导入javax.servlet.http.HttpServletRequest;
@组成部分
公共类UsersResourceImpl实现UserResource{
@自动连线
私有HttpServletRequest httpRequest;
公共响应getPlan(字符串状态){
字符串状态=httpRequest.getParameter(状态)
//一些逻辑
} 
}
'''

使用注释(即@QueryParam)这就是我们选择这种框架的原因,记住约定优于配置

好吧,老实说,我看不出有任何吸引人的理由避免使用注释,因为您需要查询参数的值

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

  • 注释将自动将查询参数的值绑定到资源方法参数、资源类字段或资源类bean属性。因此,一旦您遵守以下内容中描述的一些规则,就不需要手动提取和解析参数:

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

  • 是原始类型
  • 具有接受单个字符串参数的构造函数
  • 具有一个名为
    valueOf
    fromString
    的静态方法,该方法接受单个
    String
    参数(例如,请参见)
  • 拥有JAX-RS扩展SPI的注册实现,该实现返回一个能够对类型进行“from string”转换的实例。 Be
    List
    Set
    SortedSet
    ,其中T满足上述2、3或4。生成的集合是只读的
  • 可以与结合使用,以便在请求中不存在参数的情况下为参数定义默认值

  • 如果多个端点支持相同的查询参数,则可以将它们聚合到一个类中,并以类的形式接收此类的实例


嘿,戈帕尔!你最近问了这个问题,我花了时间和精力。我非常感谢你的支持,所以请考虑投票并接受我的回答:)