12월 21일 목 TIL

장숭혁·2023년 12월 21일
0

TIL작성

목록 보기
36/60

SecurityContextHolder.getContext().getAuthentication().getPrincipal() :

  • 인증된 사용자의 정보를 가져오는 메소드
  • 이 메소드가 반환하는 Principal 객체는 UserDetails 인터페이스를 구현한 객체이다.
  • UserDetails 인터페이스는 사용자의 정보를 나타내는 인터페이스로, getUsername(), getPassword(), getAuthorities() 등의 메소드를 가지고 있다.
  • 반환되는 객체가 실제로는 UserDetailsImpl이다.

ResponseEntity

  • HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다.
  • HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다.
  • HttpStatus, HttpHeaders, HttpBody를 포함한다.
  • ResponseEntity<T">" :
     @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
       User user = userService.findById(id);
       return new ResponseEntity<>(user, HttpStatus.OK);
    }
  • ResponseEntity<Void">
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.deleteById(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
- HTTP 상태 코드로는 204(NO_CONTENT)를 반환하고 있다.
  • ResponseEntity<HttpStatus">
@GetMapping("/check-status")
public ResponseEntity<HttpStatus> checkStatus() {
    return new ResponseEntity<>(HttpStatus.OK);
}
  • 상태 검사 요청에 대한 응답을 구성하고 있다. 본문에 HttpStatus.OK를 반환하고 있다. 이렇게 ResponseEntity를 사용하면 클라이언트에게 HTTP 응답을 보다 세밀하게 구성하고 제어할 수 있다.

    PageDto

  • 일반적으로는 페이지네이션된 데이터를 처리할 때 사용되는 데이터 전달 객체(Data Transfer Object)라고 생각할 수 있다.

    public class PageDto<T> {
       private List<T> content;
       private int pageNumber;
       private int pageSize;
       private long totalElements;
    
       public PageDto(List<T> content, int pageNumber, int pageSize, long totalElements) {
           this.content = content;
           this.pageNumber = pageNumber;
           this.pageSize = pageSize;
           this.totalElements = totalElements;
       }
    
       public List<T> getContent() {
           return content;
       }
    
       public void setContent(List<T> content) {
           this.content = content;
       }
    
       public int getPageNumber() {
           return pageNumber;
       }
    
       public void setPageNumber(int pageNumber) {
           this.pageNumber = pageNumber;
       }
    
       public int getPageSize() {
           return pageSize;
       }
    
       public void setPageSize(int pageSize) {
           this.pageSize = pageSize;
       }
    
       public long getTotalElements() {
           return totalElements;
       }
    
       public void setTotalElements(long totalElements) {
           this.totalElements = totalElements;
       }
    }```
  • 데이터, 현재 페이지 번호, 페이지당 아이템 수, 전체 데이터 수 등의 정보를 담고 있다.

  • 이 pageDto를 사용하는 예시

@GetMapping("/users")
public ResponseEntity<PageDto<User>> getUsers(
        @RequestParam(value = "page", defaultValue = "0") int page,
        @RequestParam(value = "size", defaultValue = "10") int size) {

    Page<User> userPage = userService.findAll(PageRequest.of(page, size));
    PageDto<User> userPageDto = new PageDto<>(
            userPage.getContent(),
            userPage.getNumber(),
            userPage.getSize(),
            userPage.getTotalElements());

    return new ResponseEntity<>(userPageDto, HttpStatus.OK);
}
  • 페이지 번호와 페이지당 아이템 수를 요청 파라미터로 받아, 해당하는 페이지의 사용자 목록을 반환하고 있다.
profile
코딩 기록

0개의 댓글

관련 채용 정보