【发布时间】:2021-12-24 15:20:29
【问题描述】:
我正在努力寻找解决方案... 我想知道如何获取通过请求传递的指定参数,而无需在 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)执行此操作,只需通过参数名称从它们那里获取信息。
所以我想做这样的事情:
GET --> localhost:8080/api/3/name
这将返回 id 为 3 的对象的名称
或者这样做:
GET --> localhost: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 的方法,因此它可以工作。
谢谢大牛。
【问题讨论】:
标签: java json spring-boot api generics