首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@QueryParam或HttpServletRequest ( java )

@QueryParam或HttpServletRequest ( java )
EN

Stack Overflow用户
提问于 2019-05-14 09:29:14
回答 2查看 890关注 0票数 1

我有资源类- UserResource接口,并将端点定义为getUsers。

现在,我希望根据用户状态(活动、非活动)和非强制性筛选这些用户,因此如果我不传递状态,它将获取所有用户。

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

代码语言:javascript
复制
HttpServletRequest - httpServletRequest.getParameter("Status").

以上两种方法中的哪一种是最好的方法,在哪种情况下我应该使用哪一种。

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
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
    } 
}
'''
EN

回答 2

Stack Overflow用户

发布于 2019-05-15 13:01:13

好吧,老实说,考虑到您需要查询参数的值,我认为避免使用@QueryParam注释没有什么吸引人的理由。

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

  • @QueryParam注释将自动将查询参数的值绑定到资源方法参数、资源类字段或资源类bean属性。因此,一旦您遵守了文档中描述的一些规则,就不需要手动提取和解析参数: 带注释的参数、字段或属性的T类型必须是:
代码语言:javascript
复制
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 )。
票数 1
EN

Stack Overflow用户

发布于 2019-05-14 11:13:29

使用注释(即@QueryParam),这就是为什么我们选择这样的框架,记住约定而不是配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56127117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档