14

ソナー 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 としてクイック フィックスを表示します。

このバグを解決する方法を知っている人はいますか?

4

3 に答える 3

14

ここで考慮すべきことが 2 つあります。

  1. このルールを Sonar で調整して、承認されたパラメーターの数を増やすことができます。デフォルト (?) 7 の代わりに 10 を入力します。

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) { ... }
于 2018-03-28T13:03:01.810 に答える