我有资源类-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
}
}
'''
答案 0 :(得分:1)
好吧,老实说,鉴于您需要查询参数中的值,因此没有任何吸引人的理由可以避免使用@QueryParam
注释。
我能想到的使用@QueryParam
的一些好处:
@QueryParam
批注将自动将查询参数的值绑定到资源方法参数,资源类字段或资源类bean属性。因此,一旦遵守documentation中描述的某些规则,您将无需手动提取和解析参数:
带注释的参数,字段或属性的类型
T
必须是:
- 成为原始类型
- 具有一个接受单个String参数的构造函数
- 具有名为
valueOf
或fromString
的静态方法,该方法接受一个String
自变量(例如,参见Integer.valueOf(String)
)- 已注册了
ParamConverterProvider
JAX-RS扩展SPI的实现,该扩展实现返回一个ParamConverter
实例,该实例能够对该类型进行“从字符串”转换。 为List<T>
,Set<T>
或SortedSet<T>
,其中T满足以上2、3或4。结果集合是只读的。
@QueryParam
可以与@DefaultValue
结合使用,以定义参数的默认值,以防请求中不存在该参数。
如果多个端点支持相同的查询参数,则可以将它们聚合在一个类中,并接收诸如@BeanParameter
之类的此类实例。
答案 1 :(得分:0)
使用注释(即@QueryParam),这就是我们选择这种框架的原因,请记住传统的配置方式。