web-dev-qa-db-fra.com

La méthode a 8 paramètres, ce qui est supérieur à 7 autorisés

Lorsque je scanne le code avec le sonar, le code suivant indique le bogue "La méthode a 8 paramètres, ce qui est supérieur à 7 autorisés"

@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)

Remarque: il s’agit d’une méthode de contrôle que nous ne pouvons ignorer aucun paramètre.

FYI: Eclipse montrant une solution rapide en tant que calmar: S00107

Quelqu'un a une idée de comment résoudre ce bug? 

4
Baji Shaik

Il y a deux choses à considérer ici.

  1. Vous pouvez ajuster cette règle dans Sonar et augmenter le nombre de paramètres autorisés. Dites le mettre 10 au lieu de défaut (?) 7.

UPD: le conseil ci-dessous est basé sur l'ancienne version de la question. Cela pourrait ne plus être applicable au nouveau contexte de la question.

  1. Mais généralement, vous devriez reconsidérer votre interface de méthode. Avoir de nombreux arguments signifie que quelque chose ne va pas dans votre architecture et que le { principe de responsabilité unique } peut être rompu.

Imaginons, dans votre exemple particulier, que vous puissiez avoir une classe globale 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;
   // ...
}

Ce qui est beaucoup logique de gérer au lieu de traiter avec de nombreux paramètres. Ensuite, vos problèmes seront résolus automatiquement:

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

Il s'agit d'une amélioration requise pour les règles par défaut configurées dans sonar. Selon les règles du sondeur, la méthode annotée avec @RequestMapping n'est pas liée aux règles ci-dessus de "Les méthodes ne doivent pas avoir plus de 7 paramètres". Veuillez trouver la capture d'écran appelant l'exception. Capture d'écran de Sonar indiquant l'exception

Selon sonar, "Les méthodes annotées avec @RequestMapping de Spring peuvent avoir de nombreux paramètres, l’encapsulation étant possible. Ces méthodes sont donc ignorées."

Mais les règles sonar n’ont pas été mises à niveau pour ignorer les @POSTMapping, @PutMapping, etc. lorsque Spring les a introduites. Idéalement, ce sont des implémentations enfants de @RequestMapping. Les règles applicables à @RequestMapping doivent également s'appliquer à celles-ci.

Je prévois de soulever un billet avec SONAR à ce sujet. Mettra à jour le lien une fois créé. 

Pour l'instant, vous pouvez modifier vos règles de sondeur ou les ignorer jusqu'à ce que sonar fournisse une partie de leur jeu de règles par défaut.

1
srinivasan Y