Spring Framework 4.1 — Spring MVC улучшения

Недавно Juergen Hoeller объявил о доступности первого из двух 4.1 релиз-кандидатов. Brian Clozel опубликовал статью об усовершенствовании обработки статических web-ресурсов. Ранее Stephane Nicoll опубликовал о кэше и JMS улучшениях.

java.util.Optional из JDK 1.8 теперь поддерживается в качестве аргументов методов контроллера для @RequestParam и @MatrixVariable, в то время как ListenableFuture поддерживается в качестве возвращаемого значения взамен DeferredResult, где базовый сервис (или, возможно, вызов AsyncRestTemplate) уже возвращает ListenableFuture.

@JsonView библиотеки Jackson напрямую поддерживается методами контроллеров @ResponseBody и ResponseEntity, сериализуя различное количество данных для того же POJO, например, итог для страницы. Это также поддерживается с рендерингом на основе View добавлением сериализации типа view как атрибут модели со специальным ключем.

JSONP поддерживается с Jackson. Тело ответа описывается в методах @ControllerAdvice как показано ниже. Для рендеринга на основе View просто настраивается имя(имена) JSONP параметра запроса в MappingJackson2JsonView.

@ControllerAdvice
private static class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {

    public JsonpAdvice() {
        super("callback");
    }
}

Обратите внимание, что @ControllerAdvice выл введен в версии 3.2 для @ExceptionHandler, @ModelAttribute и @InitBinder методов обмена между всеми или группой контроллеров. ResponseEntityExceptionHandler — один из примеров обработки глобального исключения в виде записи информации об ошибке в тело ответа. В 4.1 @ControllerAdvice может также реализовывать ResponseBodyAdvice, в этом случае он будет вызван после метода контроллера, но до того, как будет записан и отправлен ответ. Существуют несколько полезных приложений с использованием @JsonView JSONP в виде двух примеров построенных на нем.

Два новых HttpMessageConverter типа:

  • Gson — легче, чем Jackson; уже использовался в Spring Android
  • Google Protocol Buffers — эффективный и действенный межсервисный протокол передачи данных, который может быть представлен для браузеров как в виде JSON, так и в виде XML

MvcUriComponentsBuilder был введен в версии 4.0 как способ создания ссылок методов контроллера через вызов метода контроллера(похожее на mock-тестирование). В 4.1 представления, такие как JSP, могут также создавать ссылки контроллеров на основе соотношения(mapping) по имени. По умолчанию имя назначается каждому запросу. К примеру, FooController с методом handleFoo назначено «FC#handleFoo» по умолчанию, но стратегия именования может быть настроена и можно будет также однозначно установить новый name атрибут в @RequestMapping. Новый mvcUrl Spring JSP тэг позволяет упростить такое поведение в JSP страницах. То же самое можно сделать и для других view-технологий.

Уже знакомое ResponseEntity теперь имеет builder-стиль API, который направляет методы контроллера к подготовке ответов на стороне сервера, например, ResponseEntity.ok(). Для клиентской стороны есть новый RequestEntity, который направлен на подготовку клиентских HTTP запросов.

MVC Java конфигурация и XML пространство имен:

  • Конфигурация определения представления — если у вас была конфигурация разрешения представления с согласованным содержимым, вы скорее всего уже оценили это. См. обновленную документацию
  • Улучшенные «контроллеры представлений» — в дополнение к отображению URL’ов непосредственно для просмотра имен без необходимости в логике контроллера, контроллеры представления теперь имеют встроенную поддержку перенаправления и установки статуса ответа. Приложение может использовать это для настройки перенаправлений URL, рендеринга 404 ответа, отправки ответов «нет данных» и т.д. Другие случаи описаны здесь
  • Path matching — эти частоиспользуемые настройки в настоящее время встроены и также были импортированы в версию 4.0

Говоря о решении представления в 4.1, мы добавили поддержку рендернига представления через шаблоны разметки Groovy, доступные в Groovy 2.3. Если вы так долго ждете DRY разметку, то образцом для вас может служить HAML (Ruby on Rails).

Что связано с Spring MVC Test:

  • JSON ответа могут быть приняты JSON Assert в качестве дополнительного к использованию JSONPath так же, как это было возможно для XML и XMLUnit
  • MockMvcBuilder «средства» могут быть созданы в помощь к MockMvcConfigurer. Это было добавлено для облегчения применения настройки Spring Security, но возможно использование для инкапсулирования общих настроек для любых сторонних фреймворков или проектов
  • MockRestServiceServer теперь поддерживает AsyncRestTemplate для тестирования на стороне клиента

Расширение Spring MVC Test HtmlUnit (отдельный проект) также развивается вместе с M1. Если вам интересно попробовать, посетите страницу проекта.

comments powered by Disqus