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?
Il y a deux choses à considérer ici.
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.
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) { ... }
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.