객체를 반환할 때 필요없는 부분을 제거하는 법
1) Map 이용
2) 새로운 Object 만들어서 리턴 - 이러한 용도의 class를 DTO(Data Transfer Object)라고 함
(데이터를 특정 object 형태로 변환할 때)
DTO는 변수들에 public 필수, 안붙어있으면 스프링이 이를 JSON으로 변환할 수 없어 자동으로 getter를 쓰려고 함
DTO 장점
1) 타입 체크가 쉬움, Map은 타입체크 어려움
2) 재사용 용이
constructor 여러개 만들어서 다양한 인자 전달 가능
mapping 라이브러리로 특정 object를 다른 object로 쉽게 코드 한 줄로 변환할 수 있게 도와줌
record 이용
public record Person(String name, Integer age) {}
name, age라는 속성을 가진 Person 클래스를 하나 만들어줌
constructor, getter, toString() 등도 자동생성해줌
setter 이런건 사용불가능해서 값변경은 안됨
spring framework에 page 도 존재
thymeleaf 문법에서는 프로퍼티 접근 방식으로 접근. 함수 x
page 사용
@GetMapping("/list/page/{id}")
String getListPage(@PathVariable Integer id, Model model){
Page<Item> result = itemRepository.findPageBy(PageRequest.of(id-1, 5));
model.addAttribute("items", result.getContent());
model.addAttribute("page", result);
model.addAttribute("currentPage", id);
return "list";
}
slice도 있음. page와 다르게 전체 개수 세는 것이 없어 count()함수의 실행이 적으므로 성능적으로 이점. 더보기만 있을 때 유용