Spring-Data Web также обеспечивает поддержку модуля, который требует веб-компонентов Spring MVC-банку пакет, расположенный в пути к классам. Обычно, чтобы включить поддержку наследования путем использования @EnableSpringDataWebSupport комментария.
На SpringDataWebAutoConfiguration был добавлен комментариями @EnableSpringDataWebSupport, мы не нуждаемся в дополнительной конфигурации.
A, EnableSpringDataWebSupport зарегистрирует несколько компонентов к нам:
1, DomainClassConverter: мы можем напрямую использовать типы сущностей в списке параметров методы контроллера Spring MVC-, без необходимости вручную выглядеть, например, с помощью Repository (репозитарий достижения CrudRepository необходимости найти, чтобы иметь право быть преобразованы).
1.1, контроллер:
/ ** * * @author caofanqi * / @RestController @ RequestMapping ( "/ Пользователь" ) общественный класс UserController { / ** * здесь будет непосредственно вызывать соответствующий пользователь Repository для findById запроса. * Repository , необходимых для достижения CrudRepository нашел , чтобы иметь право на преобразование * / @GetMapping ( "/ {ID}" ) публичное Пользовательского findUserById (@PathVariable ( "ID" ) Пользователь пользователя) { возвращение пользователя; } }
1.2, блок тестирования:
@SpringBootTest @AutoConfigureMockMvc класс UserControllerTest { @Resource личное MockMvc mockMvc; @Test недействительным findUserById () бросает исключение { Строка результата = это .mockMvc.perform (получить ( "/ пользователь / 47" )) .andDo (печать ()) .andExpect (статус (). IsOk ()) .andReturn () . .getResponse () getContentAsString (); System.out.println (результат); } }
2, HandlerMethodArgumentResolvers: Мы также зарегистрировали PageableHandlerMethodArgumentResolver и SortHandlerMethodArgumentResolver пусть выгружаемый и способ сортировки может быть использован в качестве параметра управления слоем.
2.1, выгружаемой слой, или как способ управления сортировкой Параметры
Параметры: На этой странице, по умолчанию равно 0; размер параметра: размер страницы, по умолчанию 20; Параметры сортировки: направление сортировки, если множество различных направлений, используя параметры сортировки.
/ ** * Параметры страницы: Значение по умолчанию 0. * Параметры Размер: по умолчанию 20. * Параметры сортировки: сортировка по недвижимости, имущества (, ASC | DESC ) способ для заполнения, по умолчанию используется восходящий порядок, если вы хотите иметь различное направление сортировки свойство, использовать несколько параметров сортировки * / @GetMapping общественности Страница <Пользователя> LISTUSER (The выгружаемый выгружаемый) { System.out.println ( "Страница:" + pageable.getPageNumber ()); System.out.println ( "размер:" + pageable.getPageSize ()); System.out.println ( «Сортировка: "+ pageable.getSort ()); возвращение userRepository.findAll (выгружаемый); } @GetMapping ( " / Сортировка " ) общественный " строка Сортировка (Роде Сортировка) { System.out.println (Сортировать); вернуться « своего рода» ; }
@Test недействительным listUser1 () бросает исключение { Строка результата = это .mockMvc.perform (получить ( "/ пользователь" )) .andExpect (статус () isOk ().) .AndReturn () GetResponse () getContentAsString ()..; System.out.println (результат); } @Test недействительные listUser2 () бросает исключение { Строка результата = это .mockMvc.perform (Get ( "/ пользователь" ) .param ( "страница", "2"). Параметры ( "размер", "2"). Параметры ( «вид», «имя пользователя, по возрастанию»"рода", "возраст, по убыванию" )) .andExpect (статус () isOk ()). .andReturn () GetResponse () getContentAsString ()..; System.out.println (результат); }
2,2, или если имеется несколько вкладок сортировки (несколько таблиц), A @Qualifier решить, чтобы начать с параметром запроса $ {} _ квалификационном
@GetMapping ( "/ мульти / выгружаемый" ) публичная Строка multiPageable (@Qualifier ( "пользователь") выгружаемой userPageable, @Qualifier ( "книга" ) выгружаемой bookPageable) { System.out.println ( "userPageable страница:" + userPageable.getPageNumber ()); System.out.println ( "userPageable размер:" + userPageable.getPageSize ()); System.out.println ( "userPageable рода:" + userPageable.getSort ()); System.out.println ( "bookPageable страница:" + bookPageable.getPageNumber ()); System.out.println ( "bookPageable размер:" + bookPageable.getPageSize ());"bookPageable рода:" + bookPageable.getSort ()); вернуться «тест» ; }
@Test недействительный multiPageable () бросает исключение { этот .mockMvc.perform (Get ( "/ пользователя / мульти / выгружаемый" ) .param ( "user_page", "2"). Пары ( "user_size", "2"). Параметры ( "user_sort", "имя пользователя, по возрастанию"). пары ( "user_sort", "возраст, по убыванию" ) .param ( "book_page", "20"). пары ( "book_size", "20"). пары (» book_sort», "BookName") пары (. "book_sort", "цена, убывание" )) .andExpect (статус () isOk ()). }
Во-вторых, использование @PageableDefault пользовательских выгружаемой
Мы также можем настроить по умолчанию по @PageableDefault
/** * 使用@PageableDefault自定义pageable */ @GetMapping("pageable/default") public String pageableDefault(@PageableDefault(page = 2,size = 20,sort = {"username","age"},direction = Sort.Direction.DESC) Pageable pageable){ System.out.println("page:" + pageable.getPageNumber()); System.out.println("size:" + pageable.getPageSize()); System.out.println("sort:" + pageable.getSort()); return "PageableDefault"; }
@Test void pageableDefault() throws Exception { this.mockMvc.perform(get("/user/pageable/default")) .andExpect(status().isOk()); }
三、properties中的属性配置
Spring-Data还为我们提供了一些定制化配置,可以修改常见的是否将1作为第一页,默认是0,定制参数的名字,和每页最大数量等。
#是否将1为第一页 spring.data.web.pageable.one-indexed-parameters=true #pageable默认每页大小 spring.data.web.pageable.default-page-size=10 #每页大小最大值 spring.data.web.pageable.max-page-size=100 #当前页参数名 spring.data.web.pageable.page-parameter=pageIndex #每页大小参数名 spring.data.web.pageable.size-parameter=pageSize #排序参数名 spring.data.web.sort.sort-parameter=pageSort #page和size参数的前缀,不会影响sort的参数名称 spring.data.web.pageable.prefix=pre #多参数时分隔符 spring.data.web.pageable.qualifier-delimiter=-
源码地址:https://github.com/caofanqi/study-spring-data-jpa