gpt4 book ai didi

java - Spring REST @RequestMapping 实践

转载 作者:搜寻专家 更新时间:2023-11-01 02:03:08 24 4
gpt4 key购买 nike

@RestController
@RequestMapping(value = "/players")
public class REST {

@RequestMapping(method = RequestMethod.GET)
public List<Player> getAll() {
return service.getAll();
}

@RequestMapping(method = RequestMethod.GET, params = {"team", "score"})
public List<Player> getByPlayerAndScore(@RequestParam(value = "team") String team,
@RequestParam(value = "score", required = false) int score) {
return service.getByPlayerAndScore(team, score);
}
}

Q1:我期望第一种方法适用于 url“/players”(按预期工作),第二种方法适用于 url(“/players?team=xyz”,“/players ?团队=xyz&分数=1000”)。 spring 将 method1 用于“/players?team=xyz”。即使我将分数指定为可选,除非我指定 2 个参数,否则 spring 不会使用第二种方法。如何解决这个问题以及编写 Controller 方法来处理这些类型的请求的最佳方式是什么,用户可以发送不同的可用参数集(如 param1 和 param2,仅 param1,仅 param2 等)。

Q2:对于第二类不同参数集的查询,如何在DAO层编写数据库查询。我应该编写单独的方法,每个方法都有不同的查询,还是一个方法有多个 if 语句(比如如果用户发送“团队”将团队添加到数据库查询,如果用户发送“分数”将其添加到数据库查询......)

最佳答案

您的第二个映射明确指定 both teamscore 请求参数必须存在,但它们不在您的示例中/players?team=xyz。您在方法参数的绑定(bind)上编写了 required = false 这一事实是无关紧要的——@RequestMapping 明确指出请求中必须存在该参数。 (请注意,您可以有一个参数但没有值,如 /login?error 的常见 Spring Security URL 中那样。这将匹配 params = { "error"} 但将没有任何值(value)。)

在单个 Controller 方法中使用常规 if 语句可能更简单。

或者,您可能想查看 Spring 的 Querydsl 集成,它允许您将查询参数解释为可以直接传递给 Spring Data 查找器方法的 Predicate

此外,查看新的复合便利注释,例如 @GetMapping,这将使您的代码更易于阅读。

关于java - Spring REST @RequestMapping 实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40687052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com