gpt4 book ai didi

java - "Chaining"两个 Controller ?

转载 作者:行者123 更新时间:2023-12-02 06:48:06 24 4
gpt4 key购买 nike

我正在开发的 REST-API 允许访问各种类型的用户数据。

可以通过 ID、电子邮件或用户名来识别用户。然后,用户拥有一些其他数据,例如订单等。

现在我计划公开以下端点:

  • /rest/user/byemail/test@example.org/profile
  • /rest/user/byemail/test@example.org/orders
  • /rest/user/byemail/test@example.org/address
  • /rest/user/byid/123456/profile
  • /rest/user/byid/123456/orders
  • /rest/user/byid/123456/地址
  • /rest/user/byusername/test/profile
  • /rest/user/byusername/test/orders
  • /rest/user/byusername/test/address

如您所见,URL 始终由两个“部分”组成:一个用于标识用户,另一个用于标识资源。

如果我现在可以避免在 Controller 中编写 9 种不同的方法,那就太好了(因为将来可能会有其他类型的信息)。

是否可以编写一个UserController,然后由MainController返回并参数化?

public class UserController {
@RequestMapping("/profile")
public ModelAndView profile(User user) {
//...
}
@RequestMapping("/orders")
public ModelAndView profile(User user) {
//...
}
@RequestMapping("/address")
public ModelAndView profile(User user) {
//...
}
}

@RequestMapping("/rest/user")
public class MainController {
@RequestMapping("byemail/{email}")
public ??? byEmail(@PathVariable String email) {
User user = //Find user by email
//???
}
@RequestMapping("byusername/{username}")
public ??? byUserName(@PathVariable String username) {
User user = //Find user by username
//???
}
@RequestMapping("byid/{id}")
public ??? byId(@PathVariable String id) {
User user = //Find user by id
//???
}
}

或者是否可以通过某种路由来解决这个问题?
但是,“拆分”URL 并使用一半来查找正确的用户非常重要,然后在解析另一半时,该用户将作为参数使用。

最佳答案

为什么不只用一个 Controller 来处理这些请求映射呢?

@RequestMapping("/rest/user")
public class UserController {

@RequestMapping("{keyType}/{key}/orders")
public ModelAndView orders(@PathVariable String keyType, @PathVariable String key) {
User u = findUser(keyType, key);
// ...
}

@RequestMapping("{keyType}/{key}/profile")
public ModelAndView profile(@PathVariable String keyType, @PathVariable String key) {

User u = findUser(keyType, key);
// ...
}

@RequestMapping("{keyType}/{key}/address")
public ModelAndView address(@PathVariable String keyType, @PathVariable String key) {
User u = findUser(keyType, key);
// ...
}

private User findUser(String keyType, String key) {
// ...
}
}

关于java - "Chaining"两个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374748/

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