gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:20 27 4
gpt4 key购买 nike

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

  1. 将各个参数映射到相应的方法参数:
@GET
public String blah(@QueryParam("testParam") String testParam) {

}
  1. 将所有参数映射到 Java bean 的属性:
@GET
public String blah(@BeanParam RequestParamBean bean) {

}

第二个选项似乎更有吸引力,因为它允许输入查询参数的验证逻辑被移动并从 blah 方法中解耦,该方法的核心职责应该是处理并将验证委托(delegate)给 validator 应该高度解耦(还有 SOLID 原则,对吧?)。

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

最佳答案

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


@BeanParam 注释背后的想法是有一个 Java 类来聚合用 @XxxParam 注释注释的参数。以下 @XxxParam 注释可用于注释参数聚合器类的字段:

除了使用 @XxxParam 注释的字段,参数聚合器类还可以有使用 @Context 注释的字段。对于可以使用 @Context 注释注入(inject)的类型列表, check this answer


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

但是当你需要在不同的方法中重用参数或者方法有很多参数@XxxParam注解时,去@BeanParam方法。


在您的问题中,您提到了 SOLID principle 。但不要忘记 KISS principle :)

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

关于java - 我应该在 JAX-RS 中使用@QueryParam 还是@BeanParam?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38216487/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com