Главная » Spring » Создание контроллеров, ориентированных на ресурсы

0

Как было показано в главе 8, в Spring MVC используется чрезвы- чайно гибкая модель создания классов контроллеров. Практически любой метод с практически любой сигнатурой можно объявить об- работчиком веб-запросов. Однако из-за такой гибкости фреймворк Spring MVC позволяет создавать контроллеры, которые нелучшим образом подходят для обслуживания ресурсов RESTful. Слишком просто написать контроллер, противоречащий принципам архитек- туры REST.

Устройство контроллера, противоречащего архитектуре REST

Чтобы понять, как должны выглядеть контроллеры, поддерживаю- щие архитектуру REST, будет полезно узнать, как выглядят конт- роллеры, противоречащие этой архитектуре. Примером такого рода контроллеров может служить контроллер DisplaySpittleController, представленный в листинге 12.1.

Листинг 12.1. DisplaySpittleController – контроллер Spring MVC, противоречащий архитектуре REST

package  com.habuma.spitter.mvc.restless; import    javax.inject.Inject;

import    org.springframework.stereotype.Controller; import org.springframework.ui.Model;

import    org.springframework.web.bind.annotation.RequestMapping; import    org.springframework.web.bind.annotation.RequestMethod; import     org.springframework.web.bind.annotation.RequestParam;

import com.habuma.spitter.service.SpitterService;

@Controller

@RequestMapping("/displaySpittle.htm")         // Отображение URL,

// противоречащее REST

public  class  DisplaySpittleController  {

private final SpitterService spitterService;

@Inject

public    DisplaySpittleController(SpitterService    spitterService)    { this.spitterService     =     spitterService;

}

@RequestMapping(method=RequestMethod.GET)

public String showSpittle(@RequestParam("id") long id, Model model) { model.addAttribute(spitterService.getSpittleById(id));

return  "spittles/view";

}

}

Первое, на что следует обратить внимание в листинге 12.1, – имя класса контроллера. Конечно, это всего лишь имя. Но оно точно описывает, что делает этот контроллер. Первое слово Display – гла- гол. Оно наглядно показывает, что этот контроллер ориентирован на выполнение действий, а не на предоставление доступа к ресурсам.

Отметьте аннотацию @RequestMapping на уровне класса. Она гово- рит, что данный контроллер будет обрабатывать запросы к странице

/displaySpittle.htm. Похоже, что этот контроллер специализируется на представлении сообщений (что подтверждается именем класса). Более того, расширение предполагает, что информация будет ото- бражаться в формате HTML.

Сама реализация контроллера DisplaySpittleController не содер- жит никаких ошибок. Но она противоречит принципам архитек- туры REST. Контроллер ориентирован на выполнение конкретной, узкоспециализированной операции: отображение объекта Spittle в формате HTML. Даже имя класса явно говорит об этом.

Теперь, когда вы узнали, как выглядит контроллер, противоре- чащий архитектуре REST, посмотрим, как выглядит контроллер, поддерживающий эту архитектуру. Для начала исследуем, как об- рабатываются запросы к адресам URL ресурсов.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии