我有资源类-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
    }
}
'''

最佳答案

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

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


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


  带注释的参数,字段或属性的类型T必须是:
  
  
  是原始类型
  有一个接受单个String参数的构造函数
  有一个名为valueOffromString的静态方法,该方法可以接受一个
  String参数(例如,参见Integer.valueOf(String)
  已注册ParamConverterProvider JAX-RS扩展SPI的实现,该实现返回ParamConverter实例,该实例能够对该类型进行“从字符串”转换。
  是List<T>Set<T>SortedSet<T>,其中T满足上面的2、3或4。结果集合是只读的。
  

@QueryParam可以与@DefaultValue结合使用,以定义参数的默认值(如果请求中不存在该参数)。
如果多个端点支持相同的查询参数,则可以将它们聚合在一个类中,并以@BeanParameter的形式接收此类的实例。

关于java - Java中的@QueryParam或HttpServletRequest,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56127117/

10-10 00:17