我有资源类-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参数的构造函数
有一个名为valueOf
或fromString
的静态方法,该方法可以接受一个
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/