Mappez la requête GET de Spring (paramètre URL) à un objet complexe (Bean).
N'utilisez pas d'annotations de mappage.
Ou
Utilisez @ ModelAttribute
.
Spring Boot:2.1.6
lombok
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;
}
@ Data
et @ ToString
sont des annotations lombok
@ ToString
est pour la vérification@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();
}
}
Restlet Client-Access chaque point de terminaison à l'aide des tests d'API REST
hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
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]
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.
Sans annotation
(http://localhost:8080/direct?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
)
Mappé comme prévu.
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