Spring Boot REST 路径映射

标签 spring spring-boot spring-restcontroller spring-rest

我只是在想,为休息服务创建 PATH 映射的最佳实践是什么。
假设我们有以下路径:

/users POST
/users/1 PATCH, GET
/users/1/contacts GET, POST
/users/1/contacts/1 GET, PATCH

问题是 - 创建 Controller 的最佳实践是什么。
例如,我们有 UserController,从技术上讲,我们可以在其中放置所有这些映射。或者 - 我们应该创建单独的 Controller (UserController,
联系人 Controller )。
f.e UserController 下面,如果我们把所有东西都放在下面。
@RequestMapping("users")
@RestController
public class UserController {

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<Void> createUser() {}

    @RequestMapping(method = RequestMethod.GET)
    public User getUser() {}

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.GET)
    public List<Contact> getContacts() {}

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.POST)
    public ResponseEntity<Void> createContact() {}

    .....
}

如果我们创建单独的 Controller ,那么路径应该如何组织?
可能这是一个愚蠢的问题,但如果有人可以分享经验,我会很高兴。

最佳答案

让我们建议与 User 相关的实体数量将来会增加。所以很明显,最好是根据实体来拆分它:

UserController -> UserService -> UserRepository,

ContactController -> ContactService -> ContactRepository,

FriendshipController -> FriendshipService -> FriendshipRepository

根据我的经验,用户 Controller

@RestController
@RequestMapping("/user")
public class UserController extends AbstractController {

...

   @RequestMapping(method = RequestMethod.POST)
   public ResponseEntity<?> createUser(@RequestHeader("X-Auth-Token") Optional<String> @RequestBody User user) {

...

   @RequestMapping(method = RequestMethod.GET)
   public ResponseEntity<?> listUsers(@RequestHeader("X-Auth-Token") Optional<String> authToken) {
...

与用户范围 Friendship Controller 相关:
@RestController
@RequestMapping("/user/{id}")
public class FriendshipController extends AbstractController {

...

@RequestMapping(value = "/friendship/code", method = RequestMethod.POST)
    public ResponseEntity<?> generateCodeForUser(@PathVariable("id") long id) {

...

 @RequestMapping(value = "/friendship/code", method = RequestMethod.GET)
    public ResponseEntity<?> retrieveCodeForUser(@PathVariable("id") long id) {

...

不确定这是公理,但帮我组织我的代码。

关于Spring Boot REST 路径映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985644/

相关文章:

spring - 在@RestController 中限制时间执行的最佳方法

java - 从 Spring Boot 2.0.2 更新到 Spring Boot 2.1.2 导致 No Qualifying bean of type 异常

spring-boot - Angular 5 : Sending POST request with string parameters and FormData parameter together, 到 Spring REST Controller

java - (没有为参数4指定值)多对多关系错误

spring-boot - 如何在 spring-boot 中使用 ApplicationArguments

java - 如果我不想在application.properties中设置数据源怎么办?

java - “@RequiredArgsConstructor”和 'MismatchedInputException: Cannot construct instance'

java - 如何在 Spring REST Controller 中验证请求参数

java - 如何从预先确定的目录(按文件名)复制给定文件

Spring 启动: configuration inheritance