方法具有8个参数,大于7个参数



当我使用声纳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)

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

fyi:日食显示快速修复鱿鱼:s00107

有人知道如何解决此错误?

这里有两件事要考虑。

  1. 您可以在声纳中调整此规则,并增加授权参数的数量。说说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) { ... }

这是声纳中配置的默认规则所需的增强功能。根据声纳规则,@requestmapping注释的方法与"方法不得超过7个参数"的规则限制在上述规则上。请找到屏幕截图,呼叫异常。Sonar屏幕截图说明异常

根据声纳,"用Spring的@RequestMapping注释的方法可能具有很多参数,可以封装。因此,忽略了此类方法。"

但是,当春季介绍它们时,声纳规则没有升级以跳过@postmapping,@putmapping等。理想情况下,它们是@request映射的儿童实施。适用于@request映射的规则也应适用于这些规则。

正计划与Sonar提出票有关。创建后将更新链接。

现在,您可以编辑您的声纳规则或暂时忽略这些规则,直到Sonar提供其默认规则集的解决方案。

通常,这是一个很好的规则。您应该重构参数对象或构建器。但是,当涉及域模型对象的创建(例如 @entity(或不变的对象时,我倾向于忽略此规则,其中仅通过构造函数传递值。

相关内容

  • 没有找到相关文章

最新更新