Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该在JAX-RS中使用@QueryParam还是@BeanParam?_Java_Jax Rs - Fatal编程技术网

Java 我应该在JAX-RS中使用@QueryParam还是@BeanParam?

Java 我应该在JAX-RS中使用@QueryParam还是@BeanParam?,java,jax-rs,Java,Jax Rs,我正在考虑处理查询/请求参数的两个选项: 将各个参数映射到对应的方法参数: @GET 公共字符串blah(@QueryParam(“testParam”)字符串testParam){ } 将所有参数映射到Java bean的属性: @GET 公共字符串blah(@beanParamRequestParamBean){ } 第二个选项似乎更具吸引力,因为它允许移动输入查询参数的验证逻辑,并将其与blah方法分离,后者的核心职责应该是处理验证,并且将验证委托给验证器应该是高度分离的(也是可靠的原

我正在考虑处理查询/请求参数的两个选项:

  • 将各个参数映射到对应的方法参数:
  • @GET
    公共字符串blah(@QueryParam(“testParam”)字符串testParam){
    }
    
  • 将所有参数映射到Java bean的属性:
  • @GET
    公共字符串blah(@beanParamRequestParamBean){
    }
    
    第二个选项似乎更具吸引力,因为它允许移动输入查询参数的验证逻辑,并将其与
    blah
    方法分离,后者的核心职责应该是处理验证,并且将验证委托给验证器应该是高度分离的(也是可靠的原则,对吧?)

    然而,我看到的大多数示例(事实上,我正在处理的现有项目)仅使用第一个选项。我想知道第二种选择没有被广泛使用的原因是什么?有什么陷阱吗?这是反模式吗?这是否违反了任何最佳实践?

    该注释是在JAX-RS 2.0中作为参数聚合器引入的(这意味着它不能在JAX-RS 1.0中使用)


    注释背后的思想是使用Java类来聚合使用
    @XxxParam
    注释注释的参数。以下
    @XxxParam
    注释可用于注释参数聚合器类的字段:

    除了用
    @XxxParam
    注释注释的字段外,参数聚合器类还可以用注释注释字段。有关可与注释一起注入的类型的列表


    我相信这只是一个方便和开发者偏好的问题。在许多情况下,不需要类来聚合参数。在方法参数中使用
    @XxxParam
    注释非常方便

    但是,当您需要在不同的方法中重用参数,或者该方法有许多用
    @XxxParam
    注释注释的参数时,请使用这种方法


    在你的问题中,你提到了。但别忘了:)


    从方法参数中的
    @XxxParam
    注释开始,不要过度使用注释来解决您没有的问题。如果需要,您可以随时重构代码以创建参数聚合器类。

    非常感谢您的回复。我不明白最后一段。我想使用@BeanParam的原因是将验证逻辑委托给其他地方,因为方法中50%以上的代码用于方法参数验证。此外,不同方法之间的输入参数验证不一致-即一些方法根本不进行测试。因此,如果我们有一种机制可以确保我们能够适应所有这些情况,那将是一件好事。@user1539343如果
    @BeanParam
    提供了您所需要的,请使用它:)