Недавно 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. Если вам интересно попробовать, посетите страницу проекта.