Обучение Весна-данные JPA (ХVII) --- поддержка веб-модуль

  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

рекомендация

отwww.cnblogs.com/caofanqi/p/12051854.html
рекомендация