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 ResponseEntity get() {
return new ResponseEntity("GET Response", HttpStatus.OK);
}
@GetMapping("/get/{id}")
public @ResponseBody ResponseEntity
getById(@PathVariable String id) {
return new ResponseEntity("GET Response : "
+ id, HttpStatus.OK);
} 4.2. @PostMapping
@PostMapping("/post")
public @ResponseBody ResponseEntity post() {
return new ResponseEntity("POST Response", HttpStatus.OK);
} 4.3. @PutMapping
@PutMapping("/put")
public @ResponseBody ResponseEntity put() {
return new ResponseEntity("PUT Response", HttpStatus.OK);
} 4.4. @DeleteMapping
@DeleteMapping("/delete")
public @ResponseBody ResponseEntity delete() {
return new ResponseEntity("DELETE Response", HttpStatus.OK);
} 4.5. @Pathmappings
@PatchMapping("/patch")
public @ResponseBody ResponseEntity patch() {
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 .