1. Обзор
В настоящее время веб-приложение часто разделяется на два компонента – интерфейс и серверную часть.
С ростом популярности интерфейсных технологий, таких как Angular и React, бэкэнд-функции часто представлены в виде API RESTful.
В этом уроке мы создадим API-интерфейсы RESTful с использованием Spring Boot . В то же время мы будем использовать Весенние данные MongoDB для обеспечения постоянной поддержки в нашем приложении путем подключения к MongoDB.
2. Предпосылки
Нам нужен набор стандартных инструментов:
- Java 8 или более поздней версии
- Инструмент сборки (Maven или Gradle)
- Среда разработки (IntelliJ или Eclipse)
Мы будем использовать комбинацию Java 8, Gradle и IntelliJ для нашей реализации.
Чтобы быстро создать приложение Spring Boot, мы будем использовать Spring Initializr . Кроме того, мы установим и настроим MongoDB .
3. Приложение
Давайте создадим API-интерфейсы RESTful для приложения для регистрации пользователей. Для простоты мы просто добавим функции для выполнения операций CRUD (Создание, чтение, обновление и удаление).
Как только приложение Spring Boot будет создано, мы создадим файл application.properties с деталями конфигурации MongoDB:
spring.data.mongodb.database=springboot_mongo_db
3.1. Сущность
Во-первых, мы создадим Пользователь сущность с базовыми свойствами, такими как имя , |/фамилия , и электронная почта :
@Getter @Setter public class User { @Id private String id; private String firstName; private String lastName; private String email; private String phone; private String address; }
Здесь мы использовали @Id аннотация для определения идентификатора.
В то же время мы использовали @Getter и @Setter аннотации, предоставленные Проектом Ломбок для автоматического создания геттеров/сеттеров.
3.2. Хранилище
Затем мы создадим интерфейс UserRepository , который обеспечивает базовые операции с базой данных, используя данные Spring, предоставленные MongoRepository :
public interface UserRepository extends MongoRepository{ }
3.3. Услуга
Далее мы создадим класс обслуживания, который обеспечивает бизнес-логику для базовых операций CRUD.
Для этого давайте создадим Регистрацию интерфейс для определения абстракции:
public interface Registration{ USER registerUser(USER user) throws Exception; USER getUser(ID userId) throws Exception; USER updateUser(USER user) throws Exception; void deleteUser(ID userId) throws Exception; }
Затем мы создадим класс Registration Impl для реализации интерфейса Регистрация :
@Service public class RegistrationImpl implements Registration{ @Autowired private UserRepository userRepository; @Override public User registerUser(User user) throws Exception { user = userRepository.save(user); return user; } @Override public User getUser(String userId) throws Exception { User user = userRepository.findById(userId); return user; } public List getAllUser() throws Exception { List users = userRepository.findAll(); return users; } @Override public User updateUser(User user) throws Exception { user = userRepository.save(user); return user; } @Override public void deleteUser(String userId) throws Exception { if (userId == null) { throw new Exception("user id is null"); } else { userRepository.delete(userId); } } }
Обратите внимание, что мы использовали аннотацию @Service для объявления класса Регистрации Impl в качестве службы для загрузки Spring. Кроме того, мы использовали аннотацию @Autowired для введения зависимости UserRepository .
3.4. Контроллер
Теперь, когда у нас готовы сущность, репозиторий и служба, мы создадим класс RegistrationController для предоставления API-интерфейсов:
@RestController public class RegistrationController { @Autowired private RegistrationImpl registrationImpl; }
Здесь мы использовали аннотацию @RestController , чтобы объявить ее как контроллер API RESTful.
Сначала мы добавим метод регистрация пользователя для регистрации пользователя (СОЗДАНИЯ):
@PostMapping(path = "/registerUser") public ResponseEntity registerUser(@RequestBody User user) throws Exception { HashMapresp = new HashMap<>(); registrationImpl.registerUser(user); resp.put("user", user); return new ResponseEntity<>(resp, HttpStatus.OK); }
Вуаля, мы готовы с нашим первым RESTful API для регистрации пользователя.
Давайте попробуем это с помощью следующей команды curl:
curl -X POST "http://localhost:8080/registerUser" -H "Content-Type: application/json" \ -d '{"email": "xyz@email.com", "firstName": "norman", "lastName": "lewis", "phone": "90909090"}'
Затем давайте добавим метод getUser для поиска пользователя по идентификатору (ЧИТАТЬ):
@GetMapping("/getUser" ) public ResponseEntity getUser(@RequestParam("id") String id) throws Exception { User user = registrationImpl.getUser(id); return new ResponseEntity<>(user, HttpStatus.OK); }
Таким образом, мы можем использовать завиток для чтения пользователя:
curl -X GET "http://localhost:8080/getUser?id=5e0a0a393844b64a1548c4d9"
Аналогично, мы можем определить метод getallusers для извлечения всех пользователей:
@GetMapping("/getAllUser" ) public ResponseEntity getAllUser() throws Exception { Listusers = registrationImpl.getAllUser(); return new ResponseEntity<>(users, HttpStatus.OK); }
Затем мы добавим метод обновить пользователя для обновления пользователя (ОБНОВЛЕНИЕ):
@PutMapping(path = "/updateUser") public ResponseEntity updateUser(@RequestParam("id") String id, @RequestBody User user) throws Exception { HashMapresp = new HashMap<>(); registrationImpl.updateUser(user); resp.put("user", user); return new ResponseEntity<>(resp, HttpStatus.OK); }
Наконец, давайте добавим метод deleteUser для удаления пользователя (УДАЛИТЬ):
@DeleteMapping("/deleteUser") public ResponseEntity deleteUser(@RequestParam("id") String id) throws Exception { registrationImpl.deleteUser(id); HashMapresp = new HashMap<>(); resp.put("message", "User is successfully deleted"); return new ResponseEntity<>(resp, HttpStatus.OK); }
3.5. Утверждение
Затем мы добавим функцию проверки компонентов в наши API-интерфейсы с помощью hibernate-validator .
Во-первых, мы добавим зависимость в build.gradle :
compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.0.0.Final'
Затем мы добавим несколько аннотаций, таких как @NotNull и @Электронная почта для Пользователя сущности.
public class User { // ... @NotNull(message = "First Name is mandatory") private String firstName; @NotNull(message = "Last Name is mandatory") private String lastName; @NotNull(message = "Email is mandatory") @Email(message = "Not valid email") @Indexed(unique=true) private String email; @NotNull(message = "Phone Number is mandatory") private String phone; }
Далее мы будем использовать Проверяющий прослушиватель событий Mongo для регистрации в качестве компонента в основном классе – Приложение :
@SpringBootApplication public class Application { @Bean public ValidatingMongoEventListener validatingMongoEventListener() { return new ValidatingMongoEventListener(validator()); } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Наконец, мы изменим метод registerUser в Контроллере регистрации для проверки объекта пользователя:
@PostMapping(path = "/registerUser") public ResponseEntity registerUser(@RequestBody User user) throws Exception { HashMapresp = new HashMap<>(); try { registrationImpl.registerUser(user); } catch (ConstraintViolationException e) { HashMap messages = new HashMap<>(); e.getConstraintViolations().stream().forEach(constraintViolation -> { messages.put( constraintViolation.getPropertyPath().toString(), constraintViolation.getMessage()); }); resp.put("error", true); resp.put("messages", messages); } resp.put("user", user); return new ResponseEntity<>(resp, HttpStatus.OK); }
Вот и все! Мы готовы рассмотреть валидацию:
curl -X POST "http://localhost:8080/registerUser" -H "Content-Type: application/json" -d '{"email": "xyz@email.com"}'
Здесь мы не предоставили Имя , фамилия и телефон . Таким образом, ответом будет:
{"messages":{"firstName":"First Name is mandatory","lastName":"Last Name is mandatory","phone":"Phone Number is mandatory"},"error":true,"user":{"id":null,"firstName":null,"lastName":null,"email":"xyz12@email.com","phone":null,"address":null}}
3.6. Интеграция Чванства
До сих пор мы использовали curl для запроса наших API. Теперь мы интегрируем документацию Swagger 2 для наших API-интерфейсов с использованием Springfox.
Все, что нам нужно, это добавить зависимости Springfox в build.gradle :
compile "io.springfox:springfox-swagger2:2.9.2" compile 'io.springfox:springfox-swagger-ui:2.9.2'
Затем мы пометим основной класс аннотацией @EnableSwagger2:
@EnableSwagger2 @SpringBootApplication public class Application { // ... }
Вот и все! Наши спецификации API готовы и доступны по адресу http://localhost:8080/swagger-ui.html .
4. Вывод
В этом уроке мы создали API-интерфейсы RESTful для приложения регистрации пользователей с использованием SpringBoot и Spring Data MongoDB. Кроме того, мы использовали Project Lombok для сокращения шаблонного кода и API-интерфейсов Springfox для документации Swagger 2.
Все реализации кода доступны на Github
Пожалуйста, дайте мне знать, что вы думаете по этому поводу! Спасибо за чтение.
Оригинал: “https://dev.to/smartyansh/create-restful-apis-using-spring-boot-mongo-db-6cf”