我有资源类- 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,并从HttpServletRequest获得了查询param。
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
}
}
'''发布于 2019-05-15 13:01:13
好吧,老实说,考虑到您需要查询参数的值,我认为避免使用@QueryParam注释没有什么吸引人的理由。
我可以想到使用@QueryParam的一些好处:
@QueryParam注释将自动将查询参数的值绑定到资源方法参数、资源类字段或资源类bean属性。因此,一旦您遵守了文档中描述的一些规则,就不需要手动提取和解析参数:
带注释的参数、字段或属性的T类型必须是:1. Be a primitive type
2. Have a constructor that accepts a single String argument
3. Have a static method named `valueOf` or `fromString` that accepts a single `String` argument (see, for example, [`Integer.valueOf(String)`](http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true#valueOf-java.lang.String-))
4. Have a registered implementation of [`ParamConverterProvider`](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/ext/ParamConverterProvider.html) JAX-RS extension SPI that returns a [`ParamConverter`](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/ext/ParamConverter.html) instance capable of a "from string" conversion for the type. Be `List<T>`, `Set<T>` or `SortedSet<T>`, where T satisfies 2, 3 or 4 above. The resulting collection is read-only.@QueryParam与@DefaultValue组合起来,以便在请求中不存在参数时为参数定义默认值。@BeanParameter )。发布于 2019-05-14 11:13:29
使用注释(即@QueryParam),这就是为什么我们选择这样的框架,记住约定而不是配置。
https://stackoverflow.com/questions/56127117
复制相似问题