【问题标题】:Best approach to creating endpoints for a RESTful API in java using Spring使用 Spring 在 java 中为 RESTful API 创建端点的最佳方法
【发布时间】:2020-05-08 15:22:07
【问题描述】:

我是该领域的新手,正在尝试使用带有 Maven 依赖项(例如 Project Lombok)的 Spring 创建一个 API,只是为了更多地参与我的学习。

所以我已经设法编写了一些代码来启动应用程序,现在我正在创建一些端点。其中第一个是我兄弟帮助我完成的“列表用户”类型的东西,它分为 3 个类别,我将在下面列出:

(1) UserListResponse.java :

package com.tropicalia.meu_cardapio.api.user.list;

import lombok.Data;

@Data
public class UserListResponse {

    private Long id;

    private String name;

    private String email;

}

(2) UserListRest.java

package com.tropicalia.meu_cardapio.api.user.list;

import com.tropicalia.meu_cardapio.domain.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserListRest {

    @Autowired
    UserListService service;

    @GetMapping
    public ResponseEntity<List<User>> list() {
        return ResponseEntity.ok().body(service.listUsers());
    }
}

(3) UserListService.java

package com.tropicalia.meu_cardapio.api.user.list;

import com.tropicalia.meu_cardapio.domain.user.User;
import com.tropicalia.meu_cardapio.domain.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserListService {

    @Autowired
    UserRepository repository;

    public List<User> listUsers() {
        List<User> list = repository.findAll();
        return list;
    }
}

我写这篇文章的原因是我不知道如何创建其他端点,例如“创建用户”,我什至不知道从哪里开始我的研究,如果有人可以,我将不胜感激在这里帮我提供一些指导。

【问题讨论】:

标签: java spring api lombok endpoint


【解决方案1】:

我使用的一种方法是将控制器分组到所谓的资源中,例如:

  • 用户资源
  • 图书资源等

然后您可以创建一个名为UserController 的控制器,并在控制器级别进行映射,并在方法级别进行一些特定映射,例如:

@RestController
@RequestMapping("/users")
public class UserController{

    @GetMapping
    public ResponseEntity<List<UserDto>> getUsers(){}

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getOneUser(@PathVariable Long id){}

    @PostMapping
    public ResponseEntity<UserDto> addUser(@RequestBody UserDto user){}

    @PutMapping("/{id}")
    public ResponseEntity<UserDto> updateUser(@PathVariable Long id, @RequestBody UserDto user){}

}

然后您可以使用 Spring Data JPA 的服务/存储库层来读取/保存您的数据。好的起点是弹簧指南,例如:

【讨论】:

  • 感谢您的回复!!
【解决方案2】:

首先,最好只定义更多通用端点而不是 UserList,通常最好只定义 User 端点并在那里添加所有方法和路由,如 listUsers 或 getUser、addUser...

此外,当您使用 @Repository 时,它会生成基本方法来“获取添加删除或更新”您的对象。

例如,您可以在 Service 中定义

public User saveUser(User user) {
    if (user != null) {
        return repository.save(user);
    } else {
        return null;
    }
}

在你的控制器中:

@PostMapping("/addUser")
public User addUser(@Valid @RequestBody User user) {

    user newUser = service.saveUser(user);

    return newUser;
}

如果您还有其他疑问,请告诉我。 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 2013-08-07
    • 2018-01-18
    • 2023-03-17
    • 1970-01-01
    • 2015-06-05
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多