Ordnen Sie die GET-Anforderung von Spring (URL-Parameter) einem komplexen Objekt (Bean) zu.
Verwenden Sie keine Mapping-Anmerkungen. Oder Verwenden Sie "@ ModelAttribute".
Spring Boot:2.1.6
lombok
Übergeordnetes Objekt
@Data
@ToString
public class ComplexBean {
private String hoge;
private ChildBean childBean;
private List<ItemBean> itemBeans;
}
Untergeordnetes Objekt zum Verschachteln
@Data
@ToString
public class ChildBean {
private String piyo;
}
Objekt für Liste
@Data
@ToString
public class ItemBean {
private String fuga;
}
@ Data
und @ ToString
sind Lombok-Anmerkungen
@ ToString
dient zur Überprüfung@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();
}
}
Stellen Sie den Clientzugriff auf jeden Endpunkt mithilfe von REST-API-Tests wieder her
hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
Bei Verwendung von @ RequestParam
(http://localhost:8080/param?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
)
Da die Zuordnungsinformationen nicht ausreichen, kann keine Analyse durchgeführt werden, und es tritt ein Fehler auf.
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required ComplexBean parameter 'bean' is not present]
Bei Verwendung von @ ModelAttribute
(http://localhost:8080/model?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
)
Wie erwartet zugeordnet.
Ohne Anmerkung
(http://localhost:8080/direct?hoge=hoge&childBean.piyo=piyo&itemBeans[0].fuga=fuga0&itemBeans[2].fuga=fuga2
)
Wie erwartet zugeordnet.
Auch bei URL-Parametern mit folgender Struktur
Verwenden Sie keine Mapping-Anmerkungen. Oder Verwenden Sie "@ ModelAttribute".
Wenn ja, kann es ~~ zugeordnet werden, aber lassen Sie uns das Design überprüfen, wenn es notwendig wird, einem solchen Objekt in der GET-Anforderung ~~ zuzuordnen. Wenn die Sequenznummer wie bei der Überprüfung übersprungen wird, wird für die übersprungene Verzweigungsnummer "null" gesetzt. (⇒ Es wird kein leeres Objekt sein)
Recommended Posts