[JAVA] Mappez les requêtes GET sur des objets complexes dans Spring.

Ce que vous voulez faire (objectif)

Mappez la requête GET de Spring (paramètre URL) à un objet complexe (Bean).

Conclusion

N'utilisez pas d'annotations de mappage. Ou Utilisez @ ModelAttribute.

environnement

Spring Boot:2.1.6

Autres bibliothèques utilisées

lombok

Source de vérification textile

Cartographie de la destination

Objet parent

@Data
@ToString
public class ComplexBean {
  private String hoge;
  private ChildBean childBean;
  private List<ItemBean> itemBeans;
}

Objet enfant pour l'imbrication

@Data
@ToString
public class ChildBean {
  private String piyo;
}

Objet pour liste

@Data
@ToString
public class ItemBean {
  private String fuga;
}

manette

@RestController
public class DemoRestController {

  @GetMapping(value = "/param")
  @ResponseBody
  public String getParam(@RequestParam ComplexBean bean) {
    System.out.println(bean.toString());
    return bean.toString();
  }

  @GetMapping(value = "/model")
  @ResponseBody
  public String getModel(@ModelAttribute ComplexBean bean) {
    System.out.println(bean.toString());
    return bean.toString();
  }

  @GetMapping(value = "/direct")
  @ResponseBody
  public String getDirect(ComplexBean bean) {
    System.out.println(bean.toString());
    return bean.toString();
  }
}

Vérification

Restlet Client-Access chaque point de terminaison à l'aide des tests d'API REST

Paramètre d'URL à vérifier

hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2

résultat

Lors de l'utilisation de @ RequestParam (http://localhost:8080/param?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2) Les informations de mappage étant insuffisantes, l'analyse ne peut pas être effectuée et une erreur se produit.

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required ComplexBean parameter 'bean' is not present]

image.png

Lors de l'utilisation de @ ModelAttribute (http://localhost:8080/model?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2) Mappé comme prévu. image.png

Sans annotation (http://localhost:8080/direct?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2) Mappé comme prévu. image.png

Résumé

Même avec des paramètres d'URL qui ont la structure suivante

N'utilisez pas d'annotations de mappage. Ou Utilisez @ ModelAttribute.

Si tel est le cas, il peut être mappé ~~, mais passons en revue la conception lorsqu'il devient nécessaire de mapper à un tel objet dans la requête GET ~~. Si le numéro de séquence est ignoré comme lors de la vérification, «null» est défini pour le numéro de branche ignoré. (⇒ Ce ne sera pas un objet vide)

Recommended Posts

Mappez les requêtes GET sur des objets complexes dans Spring.
Obtenez des cookies au printemps
Comment utiliser Lombok au printemps
Obtenir des valeurs de carte nulles en Java
Comment obtenir des paramètres dans Spark
Convertir les paramètres de demande en Enum au printemps
Pour écrire des données de réponse directement dans Spring
Comment obtenir la date avec Java
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
[Spring Boot] Comment obtenir des propriétés dynamiquement à partir d'une chaîne contenue dans une URL
Comment obtenir les informations d'identification Keycloak dans la classe d'intercepteur
Comment obtenir une classe depuis Element en Java
Comment ajouter un chemin de classe dans Spring Boot
Bibliothèque "OSHI" pour acquérir des informations système avec Java
Comment se lier avec un fichier de propriétés dans Spring Boot
Comment définir plusieurs orm.xml dans Spring4, JPA2.1
Je veux obtenir la valeur en Ruby
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
Obtenez plusieurs ressources qui correspondent au modèle au printemps
ARKit: Nommez des objets dans Reality Composer, obtenez des noms dans Swift
Mappez automatiquement DTO aux entités avec l'API Spring Boot
Comment obtenir des informations sur les tables associées dans les tables plusieurs-à-plusieurs
Comment créer un projet Spring Boot dans IntelliJ
Source utilisée pour obtenir l'URL de la source de redirection en Java
J'ai essayé de démarrer avec Spring Data JPA
Obtention des objets Locale pour tous les paramètres régionaux disponibles en Java
Où se perdre dans les spécifications avec le routage Spark
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
Présentez swagger-ui à l'API REST implémentée dans Spring Boot
Comment utiliser le référentiel de jobs en mémoire avec Spring Batch