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

Весенние веб-аннотации

Изучите основные аннотации, которые можно использовать для обработки запросов и ответов HTTP весной MVC.

Автор оригинала: Attila Fejér.

Весенние веб-аннотации

1. Обзор

В этом учебнике мы изумим аннотации Spring Web от org.springframework.web.bind.annotation пакет.

2. @RequestMapping

Проще говоря, @RequestMapping отметки методов обработчика запросов внутри @Controller классы; он может быть настроен с помощью:

  • путь, или его псевдонимы, имя, и значение: какой URL-адрес метода отображен на
  • метод: совместимые методы HTTP
  • парамы: запросы фильтров на основе наличия, отсутствия или значения параметров HTTP
  • головки: фильтрует запросы на основе наличия, отсутствия или ценности хедеров HTTP
  • потребляет: какие типы средств массовой информации метод может потреблять в органе запроса HTTP
  • производит: какие типы средств массовой информации метод может производить в органе реагирования HTTP

Вот быстрый пример того, как это выглядит:

@Controller
class VehicleController {

    @RequestMapping(value = "/vehicles/home", method = RequestMethod.GET)
    String home() {
        return "home";
    }
}

Мы можем предоставить настройки по умолчанию для всех методов обработчика в @Controller класс если применить эту аннотацию на уровне класса. Единственная Исключением является URL-адрес, который Spring не переопределяет с настройками уровня метода, но притязает две части пути.

Например, следующая конфигурация имеет тот же эффект, что и приведенная выше:

@Controller
@RequestMapping(value = "/vehicles", method = RequestMethod.GET)
class VehicleController {

    @RequestMapping("/home")
    String home() {
        return "home";
    }
}

Более того, @GetMapping , @PostMapping , @PutMapping , @DeleteMapping , и @PatchMapping различные варианты @RequestMapping с методом HTTP уже установлен на GET, POST, PUT, DELETE и PATCH соответственно.

Они доступны с весны 4.3 релиз.

3. @RequestBody

Давайте перейдем к @RequestBody – какие карты тело запроса HTTP на объект :

@PostMapping("/save")
void saveVehicle(@RequestBody Vehicle vehicle) {
    // ...
}

Дезириализация происходит автоматически и зависит от типа содержимого запроса.

4. @PathVariable

Далее, давайте поговорим об @PathVariable .

Эта аннотация указывает на то, что аргумент метода привязан к переменной переменной шаблона URI . Мы можем указать шаблон URI с помощью @RequestMapping аннотация и привязка аргумента метода к одной из частей шаблона с @PathVariable .

Мы можем достичь этого с помощью имя или его псевдоним, значение аргумент:

@RequestMapping("/{id}")
Vehicle getVehicle(@PathVariable("id") long id) {
    // ...
}

Если название части в шаблоне соответствует названию аргумента метода, мы не должны указывать его в аннотации:

@RequestMapping("/{id}")
Vehicle getVehicle(@PathVariable long id) {
    // ...
}

Кроме того, мы можем пометить переменную пути, необязательную, установив необходимых ложной:

@RequestMapping("/{id}")
Vehicle getVehicle(@PathVariable(required = false) long id) {
    // ...
}

5. @RequestParam

Мы используем @RequestParam для доступ к параметрам запроса HTTP :

@RequestMapping
Vehicle getVehicleByParam(@RequestParam("id") long id) {
    // ...
}

Он имеет те же параметры конфигурации, что и @PathVariable аннотация.

В дополнение к этим настройкам, с @RequestParam мы можем указать введенное значение, когда Spring не находит в запросе значения или пустого значения. Для этого мы должны установить по умолчаниюВалю аргумент.

Предоставление значения по умолчанию неявно устанавливает необходимых ложный:

@RequestMapping("/buy")
Car buyCar(@RequestParam(defaultValue = "5") int seatCount) {
    // ...
}

Помимо параметров, есть другие части запроса HTTP, к которые мы можем получить доступ: файлы cookie и . Мы можем получить к ним доступ с аннотациями @CookieValue и @RequestHeader соответственно.

Мы можем настроить их так же, как @RequestParam .

6. Аннотации обработки ответов

В следующих разделах мы увидим наиболее распространенные аннотации для манипулирования ответами HTTP весной MVC.

6.1. @ResponseBody

Если мы отметим метод обработчика запросов @ResponseBody , Весна рассматривает результат метода как сам ответ :

@ResponseBody
@RequestMapping("/hello")
String hello() {
    return "Hello World!";
}

Если мы аннотировать @Controller класс с этой аннотацией, все методы обработчика запросов будут использовать его.

6.2. @ExceptionHandler

С помощью этой аннотации мы можем объявить пользовательский метод обработчика ошибок . Spring вызывает этот метод, когда метод обработчика запросов бросает любое из указанных исключений.

Пойманое исключение может быть передано методу в качестве аргумента:

@ExceptionHandler(IllegalArgumentException.class)
void onIllegalArgumentException(IllegalArgumentException exception) {
    // ...
}

6.3. @ResponseStatus

Мы можем указать желаемого статуса HTTP ответной если аннотировать метод обработчика запросов с помощью этой аннотации. Мы можем объявить код статуса с код аргумент, или его псевдоним, значение аргумент.

Кроме того, мы можем предоставить причину, используя причина аргумент.

Мы также можем использовать его вместе с @ExceptionHandler :

@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
void onIllegalArgumentException(IllegalArgumentException exception) {
    // ...
}

Для получения дополнительной информации о статусе ответа HTTP, пожалуйста, посетите эту статью .

7. Другие веб-аннотации

Некоторые аннотации не управляют запросами или ответами HTTP напрямую. В следующих разделах мы представим наиболее распространенные из них.

7.1. @Controller

Мы можем определить контроллер Spring MVC с @Controller . Для получения дополнительной информации, пожалуйста, посетите наша статья о Весна Бин Аннотации .

7.2. @RestController

@RestController сочетает в @Controller и @ResponseBody .

Таким образом, следующие декларации эквивалентны:

@Controller
@ResponseBody
class VehicleRestController {
    // ...
}
@RestController
class VehicleRestController {
    // ...
}

7.3. @ModelAttribute

С этой аннотацией мы можем элементы доступа, которые уже находятся в модели MVC @Controller, предоставляя ключ модели:

@PostMapping("/assemble")
void assembleVehicle(@ModelAttribute("vehicle") Vehicle vehicleInModel) {
    // ...
}

Как с @PathVariable и @RequestParam , мы не должны указывать ключ модели, если аргумент имеет то же имя:

@PostMapping("/assemble")
void assembleVehicle(@ModelAttribute Vehicle vehicle) {
    // ...
}

Кроме того, @ModelAttribute имеет другое применение: если мы аннотировать метод с ним, Весна автоматически добавляйте значение возврата метода к модели :

@ModelAttribute("vehicle")
Vehicle getVehicle() {
    // ...
}

Как и прежде, мы не должны указывать ключ модели, Spring использует имя метода по умолчанию:

@ModelAttribute
Vehicle vehicle() {
    // ...
}

Перед тем, как Spring вызывает метод обработчика запросов, он вызывает все @ModelAttribute аннотированные методы в классе.

Более подробная информация о @ModelAttribute можно найти в эта статья .

7.4. @CrossOrigin

@CrossOrigin позволяет осуществлять меж доменную коммуникационную для аннотированных методов обработчика запросов:

@CrossOrigin
@RequestMapping("/hello")
String hello() {
    return "Hello World!";
}

Если мы отмечаем класс с ним, он применяется ко всем методам обработчика запросов в нем.

Мы можем точно настроить поведение CORS с аргументами этой аннотации.

Для получения более подробной информации, пожалуйста, посетите эту статью .

8. Заключение

В этой статье мы увидели, как мы можем обрабатывать запросы и ответы HTTP с Spring MVC.

Как обычно, примеры доступны более на GitHub .