1. Обзор
Spring 4.3. ввел некоторые очень классные аннотации на уровне метода, составленные для сглаживания обработки @RequestMapping в типичных проектах Spring MVC.
В этой статье мы узнаем, как эффективно их использовать.
2. Новые Аннотации
Как правило, если бы мы хотели реализовать обработчик URL с помощью традиционной аннотации @RequestMapping , это было бы что-то вроде этого:
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
Новый подход позволяет сократить это просто до:
@GetMapping("/get/{id}")
Spring в настоящее время поддерживает пять типов встроенных аннотаций для обработки различных типов входящих методов HTTP-запросов, которые являются GET, POST, PUT, DELETE и PATCH . Эти аннотации являются:
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @@Pathmapping
Из соглашения об именовании мы видим, что каждая аннотация предназначена для обработки соответствующего типа метода входящего запроса, т. е. @GetMapping используется для обработки GET типа метода запроса, @PostMapping используется для обработки POST типа метода запроса и т. Д.
3. Как Это Работает
Все вышеперечисленные аннотации уже внутренне аннотированы с помощью @RequestMapping и соответствующего значения в элементе method .
Например, если мы посмотрим на исходный код аннотации @GetMapping , то увидим, что она уже аннотирована с помощью RequestMethod.ПОЛУЧИТЬ можно следующим образом:
@Target({ java.lang.annotation.ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = { RequestMethod.GET }) public @interface GetMapping { // abstract codes }
Все остальные аннотации создаются таким же образом, т. е. @PostMapping аннотируется методом Request.POST , @PutMapping аннотируется с помощью RequestMethod.PUT, и т. Д.
Полный исходный код аннотаций доступен здесь .
4. Реализация
Давайте попробуем использовать эти аннотации для создания быстрого приложения REST.
Обратите внимание, что поскольку мы будем использовать Maven для сборки проекта и Spring MVC для создания нашего приложения, нам нужно добавить необходимые зависимости в pom.xml:
org.springframework spring-webmvc 5.2.2.RELEASE
Последняя версия spring-webmvc доступна в Центральном репозитории Maven .
Теперь нам нужно создать контроллер для отображения URL-адреса входящего запроса. Внутри этого контроллера мы будем использовать все эти аннотации одну за другой.
4.1. @GetMapping
@GetMapping("/get") public @ResponseBody ResponseEntityget() { return new ResponseEntity ("GET Response", HttpStatus.OK); }
@GetMapping("/get/{id}") public @ResponseBody ResponseEntitygetById(@PathVariable String id) { return new ResponseEntity ("GET Response : " + id, HttpStatus.OK); }
4.2. @PostMapping
@PostMapping("/post") public @ResponseBody ResponseEntitypost() { return new ResponseEntity ("POST Response", HttpStatus.OK); }
4.3. @PutMapping
@PutMapping("/put") public @ResponseBody ResponseEntityput() { return new ResponseEntity ("PUT Response", HttpStatus.OK); }
4.4. @DeleteMapping
@DeleteMapping("/delete") public @ResponseBody ResponseEntitydelete() { return new ResponseEntity ("DELETE Response", HttpStatus.OK); }
4.5. @Pathmappings
@PatchMapping("/patch") public @ResponseBody ResponseEntitypatch() { return new ResponseEntity ("PATCH Response", HttpStatus.OK); }
Моменты, которые следует отметить:
- Мы использовали необходимые аннотации для обработки правильных входящих HTTP-методов с URI . Например, @GetMapping для обработки URI “/get”, @PostMapping для обработки URI”/post ” и так далее
- Поскольку мы создаем приложение на основе REST, мы возвращаем постоянную строку (уникальную для каждого типа запроса) с кодом ответа 200, чтобы упростить приложение. В этом случае мы использовали аннотацию Spring @ResponseBody .
- Если бы нам пришлось обрабатывать любую переменную пути URL-адреса, мы могли бы просто сделать это гораздо меньше, чем раньше, в случае использования @RequestMapping.
5. Тестирование приложения
Чтобы протестировать приложение, нам нужно создать пару тестовых случаев с помощью JUnit. Мы будем использовать SpringJUnit4ClassRunner для инициализации тестового класса. Мы создали бы пять различных тестовых случаев для проверки каждой аннотации и каждого обработчика, объявленного в контроллере.
Давайте рассмотрим простой пример теста @GetMapping:
@Test public void giventUrl_whenGetRequest_thenFindGetResponse() throws Exception { MockHttpServletRequestBuilder builder = MockMvcRequestBuilders .get("/get"); ResultMatcher contentMatcher = MockMvcResultMatchers.content() .string("GET Response"); this.mockMvc.perform(builder).andExpect(contentMatcher) .andExpect(MockMvcResultMatchers.status().isOk()); }
Как мы видим, мы ожидаем постоянную строку ” GetResponse “, как только мы нажмем GET URL “/get”.
Теперь давайте создадим тестовый случай для тестирования @PostMapping :
@Test public void givenUrl_whenPostRequest_thenFindPostResponse() throws Exception { MockHttpServletRequestBuilder builder = MockMvcRequestBuilders .post("/post"); ResultMatcher contentMatcher = MockMvcResultMatchers.content() .string("POST Response"); this.mockMvc.perform(builder).andExpect(contentMatcher) .andExpect(MockMvcResultMatchers.status().isOk()); }
Таким же образом мы создали остальные тестовые случаи для тестирования всех методов HTTP.
Кроме того, мы всегда можем использовать любой общий клиент REST, например, PostMan, REST Client и т. Д., Чтобы протестировать наше приложение. В этом случае нам нужно быть немного осторожными, чтобы выбрать правильный тип метода HTTP при использовании клиента rest. В противном случае он выдаст статус ошибки 405.
6. Заключение
В этой статье мы быстро познакомились с различными типами ярлыков @RequestMapping для быстрой веб-разработки с использованием традиционного фреймворка Spring MVC. Мы можем использовать эти быстрые ярлыки для создания чистой базы кода.
Как всегда, вы можете найти исходный код этого учебника в проекте Github .