programing

Spring Data Rest - 여러 속성

jooyons 2023. 3. 21. 21:53
반응형

Spring Data Rest - 여러 속성

아래와 같은 엔티티가 있습니다.

Class Person{
String id;
String name;
String numberOfHands;
}

Spring Data Rest(고슬링 릴리즈 트레인)를 사용하여

localhost/Person?sort=name,asc

정렬 이름 오름차순입니다.다음으로 내림차순과 이름 오름차순으로 정렬해야 하는 경우입니다.특정할 수 있습니다.

localhost/Person?sort=numberOfHands,name,asc

단, 특정할 수 없습니다.

localhost/Person?sort=numberOfHands,desc,name,asc

여러 정렬 순서를 지정할 수 있는 방법이 있습니까?

감사합니다!

솔루션(tl;dr)

여러 필드에 정렬할 경우,sortURI에서 여러 번 파라미터를 지정합니다.예를들면your/uri?sort=name,asc&sort=numberOfHands,desc스프링 데이터를 사용하여Pageable여러 정렬이 있는 객체.

설명.

URI 내의 파라미터에 복수의 값을 송신하는 방법에 대해서는, 실제로 정의된 규격은 없습니다.GET 요청에서 동일한 매개 변수 이름에 대해 여러 값을 전달하는 올바른 방법을 참조하십시오.

그러나 Java Servlet Spec에는 Java Servlet 컨테이너가 요청 매개 변수를 해석하는 방법을 암시하는 몇 가지 정보가 있습니다.

getParameterValuesmethod는 의 배열을 반환합니다.String파라미터 이름과 관련된 모든 파라미터 값을 포함하는 오브젝트.- Java Servlet Spec, 섹션 3.1

이 섹션의 샘플은 (요청 데이터와 본문 데이터가 혼재되어 있지만) 더 자세히 기술되어 있습니다.

예를 들어 다음과 같은 쿼리 문자열을 사용하여 요구가 이루어진 경우a=hello및 포스트 본체a=goodbye&a=world결과 파라미터 세트의 순서가 지정됩니다.a=hello, goodbye, world.

이 샘플은 파라미터가a이 예에서)는 결과가 여러 번 집약되어 표시됩니다.String[].

다음은 다중 정렬 개체를 수동으로/프로그램적으로 구성하는 방법입니다.

Sort sort = Sort.by(
    Sort.Order.asc("name"),
    Sort.Order.desc("numberOfHands"));
return personRepository.findAll(sort);

주의: 이 솔루션은 원래 질문을 직접 해결하지는 않지만, 이 질문을 받은 방문자가 백엔드 관점에서 또는 다소 '하드코드' 방식으로 여러 속성을 정렬하는 방법을 찾을 때 도움이 될 수 있습니다.(이 솔루션에서는 URI 파라미터는 불필요/취득)

동적 필드가 있는 경우 필드와 일치하여 다음과 같이 정렬 목록에 추가합니다.

List<Sort.Order> sorts= new ArrayList<>();
if (sort == "name" && sortingOrder.equalsIgnoreCase("DESC")) {
   sorts.add(new Sort.Order(Sort.Direction.DESC,"name"));
} else if (sort == "numberOfHands" && sortingOrder.equalsIgnoreCase("DESC")) {
  sorts.add(new Sort.Order(Sort.Direction.DESC,"numberOfHands"));
}
     
return personRepository.findAll(Sort.by(sorts)); 

Pagination을 사용하는 경우 PageRequest Request에 직접 추가합니다.

return personRepository.findPersons(PageRequest.of(pageNo, pageSize, Sort.by(sorts)));

언급URL : https://stackoverflow.com/questions/33018127/spring-data-rest-sort-by-multiple-properties

반응형