我正在努力為此找到解決方案......我想知道如何獲取通過請求傳遞它的指定引數,而不必在 Spring Boot API 中對每個特定情況進行編碼。
例如,就我而言,我有這個 JSON 物件:
{
"id": 3,
"name": "test",
"dominio": "dom",
"altas": "6",
"bajas": "2",
"default_group": [
{
"idRef": 1,
"name": "Users",
"path": "OU=es"
}
],
"office": [
{
"idRef": 1,
"title": "Intern",
"name": "CN=Office license",
"path": "OU=licenseOffice"
},
{
"idRef": 2,
"title": "Specialist",
"name": "CN=Office License F3",
"path": "OU=LicenseGroupF"
}
]
除此之外,我在代碼中定義了所有物體,但我想僅使用它們的名稱來訪問它們的引數之一,例如 name、dominio、altas、bajas、default_group 或 office。
這樣做的想法是無需為每個引數撰寫每個方法。
我不必對嵌套物件(office 和 default_group)執行此操作,只需從它們傳遞引數名稱獲取資訊即可。
所以我想做一些類似的事情:
獲取 --> 本地主機:8080/api/3/name
這將回傳 id 為 3 的物件的名稱
或者這樣做:
獲取 --> 本地主機:8080/api/3/default_group
這將回傳包含所有 default_groups 的陣列。
除此之外,我想知道是否可以對做同樣事情的方法進行PUT請求。
不知道能不能做到,如果可以的話,能不能給點指導之類的...
非常感謝
編輯。感謝@daniu,我讓它完美地作業,我根據他的評論將我的解決方案粘貼在這里,所以如果有人覺得它有幫助。我的物件叫做“Compania”。
@GetMapping("/{companiaId}/{field_name}")
public Object queryField(
@PathVariable("companiaId") Long companiaId,
@PathVariable("field_name") String fieldName) {
Map<String, Function<Compania, Object>> fieldRetrievers = Map.of(
"name", Compania::getName,
"dominio", Compania::getDominio,
"altas", Compania::getAltas,
"bajas", Compania::getBajas,
"default_group", Compania::getDefault_group,
"office", Compania::getOffice
);
Compania c = companiaService.getCompaniaNotOpt(companiaId);
Function<Compania, Object> retriever = fieldRetrievers.get(fieldName);
return retriever.apply(c);
}
getCompaniaNotOpt 是一種采用 Compania 而不是 Optional 的方法,因此它可以作業。
謝謝大牛。
uj5u.com熱心網友回復:
我不會認為這是最干凈的設計,但是可以創建一個Map包含所有欄位訪問器名稱的方法:
Map<String, Function<YourClass>> fieldRetrievers = Map.of(
"name", YourClass::getName,
"default_group", YourClass::getDefaultGroup,
"office", YourClass::getOffice
);
然后你可以在你的控制器中使用它(實際上是服務,但在這里保持簡短):
@GetMapping("/path/{field_name}")
Object queryField(@PathVariable("field_name") String fieldName) {
YourClass c = getObject();
Function<YourClass, Object> retriever = fieldRetrievers.get(fieldName);
return retriever.apply(c);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363427.html
