方法有8个参数,大于7个授权

新手上路,请多包涵

当我使用 sonar lint 扫描代码时,以下代码将错误显示为“方法有 8 个参数,大于 7 个已授权”

 @PutMapping("/something")
public List<SomeList> updateSomeThing(@PathVariable final SomeCode code,
                                            @PathVariable final SomeId id,
                                            @PathVariable final String testId,
                                            @PathVariable final String itemId,
                                            @RequestBody final List<Test> someList,
                                            @RequestHeader("test") final String testHeader,
                                            final HttpServletRequest request,
                                            final SomeHeaders someHeaders)

注意:这是一个控制器方法,我们不能跳过任何参数

仅供参考:Eclipse 将快速修复显示为 squid:S00107

任何人都知道如何解决这个错误?

原文由 Baji Shaik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 888
1 个回答

这里有两件事需要考虑。

  1. 您可以在 Sonar 中调整此规则,增加授权参数的数量。假设将其设置为 10 而不是默认值 (?) 7。

UPD :以下建议基于旧问题版本。它可能不再适用于新的问题上下文。

  1. 但通常你应该重新考虑你的方法接口。有很多参数意味着您的体系结构中可能有问题, 单一责任原则 可能会被打破。

在您的特定示例中,我希望您可以拥有一个聚合类 Order

 public class Order {
   private CountryCode countryCode;
   private String orderId;
   private User user;
   private String orderId;
   private String item;
   private List<Person> persons;
   private ShippingAddress address;
   private PaymentMethod payment;
   private Product product;
   // ...
}

管理而不是处理许多参数是合乎逻辑的。然后您的问题将自动解决:

 @GetMapping
public void updateSomething(Order order) { ... }

原文由 Andremoniy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题