5 votes

Lier les paramètres de requête avec des underscores dans Spring MVC 3.0

Considérons l'exigence suivante : les paramètres de la requête doivent être liés à des objets en utilisant Spring MVC 3.0. Les paramètres de la requête contiennent des underscores (par ex. http://myurl:80/x?param_one=1&param_two=2 ). Ces paramètres doivent être liés à l'objet suivant :

class MyObject {
    private Integer paramOne;
    private Integer paramTwo;

    ...
}

Comment procéder ?

Remarque importante : considérer qu'il peut y avoir un nombre substantiel de paramètres et d'objets comme celui-ci et qu'il n'est pas considéré comme une bonne pratique de définir des méthodes de définition sur les objets qui incluent des traits de soulignement.

3voto

Mike Fairhurst Points 537

La réponse de Rajith concerne spécifiquement les méthodes de contrôleurs et ne répond pas à votre question initiale, à savoir comment lier les paramètres de soulignement à un objet.

La solution que j'ai actuellement mise en place pour réaliser ce que vous demandez est de nommer mes setters dans ce style :

public void setProject_ids(List<Long> project_ids) {

Notez que RequestParam ne peut pas être appliqué aux méthodes et qu'il n'a pas d'effet lorsqu'il est appliqué à l'argument de ce setter.

1voto

Rajith Delantha Points 183

Vous pouvez le faire en utilisant @RequestMapping attribut

@RequestParam(value = "param_One") String paramOne,@RequestParam(value = "param_two") String paramTwo

Ajouter ceci à la signature de la méthode

Mais pour une meilleure pratique, il est préférable de passer le même nom de variable.

0voto

Jordan Silva Points 113

Neuf ans plus tard... La solution la plus propre est d'utiliser l'injection de constructeur et de l'annoter avec @ConstructorProperties . De cette façon, vous pouvez garder la classe immuable et utiliser la convention de nommage de Java.

@Value
class MyObject {
  Integer paramOne;
  Integer paramTwo;

  @ConstructorProperties({"param_one", "param_two"})
  MyObject(Integer paramOne, Integer paramTwo) {
    this.paramOne = paramOne;
    this.paramTwo = paramTwo;
  }

Même si vous avez une très longue liste de champs, vous pouvez générer le constructeur et n'avoir qu'à écrire l'annotation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X