Рубрики
Без рубрики

Spring @RequestMapping Новые Ярлыки Аннотаций

В этой статье мы представим различные типы ярлыков @RequestMapping для быстрой веб-разработки с использованием традиционного фреймворка Spring MVC.

Автор оригинала: baeldung.

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 .