Spring 스터디 6주차

ChapJun·2022년 1월 14일
0

1. ResponseEntity란?

  • Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다.
  • 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다.
public class HttpEntity<T> {

	private final HttpHeaders headers;

	@Nullable
	private final T body;
}

public class RequestEntity<T> extends HttpEntity<T>

public class ResponseEntity<T> extends HttpEntity<T>
  • HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다.
  • ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다.
  • 따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다.

2. ResponseEntity 생성자 사용법

2-1. HttpStatus 코드

ResponseEntity<Object> responseEntity = new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);

2-2. 객체, HttpStatus 코드

ResponseEntity<Taco> tacoResponseEntity = new ResponseEntity<>(new Taco(), HttpStatus.OK);

2-3. 객체, HttpHeaders, HttpStatus 코드

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("TEST", "MYTEST");

ResponseEntity<Taco> tacoResponseEntity 
= new ResponseEntity<>(new Taco(), headers, HttpStatus.OK);

3. EntityModel

  • ResourceSupport → RepresentationModel
  • Resource → EntityModel
  • Resources → CollectionModel
  • PagedResources → PagedModel

3.1 EntityModel 사용법

public static <T> EntityModel<T> of(T content, Link... links) {
        return of(content, (Iterable)Arrays.asList(links));
    }
    
EntityModel<Taco> model = EntityModel.of(taco.orElse(null),
linkTo(methodOn(this.getClass()).recentTacos()).withRel("recents"));

3.2 CollectionModel 사용법

public static <T> CollectionModel<T> of(Iterable<T> content, Link... links) {
        return of(content, (Iterable)Arrays.asList(links));
    }

@GetMapping("/recent")
    public CollectionModel<EntityModel<Taco>> recentTacos() {
        PageRequest page = PageRequest.of(0, 12, Sort.by("createdAt").descending());

        List<Taco> tacos = tacoRepository.findAll(page).getContent();

        // HATEOS -> 링크추가 (REST API Level 3)
        List<EntityModel<Taco>> entityModels =  tacos.stream().map(
                taco -> {
                    return EntityModel.of(taco, linkTo(methodOn(DesignTacoRestController.class).tacoById(taco.getId())).withSelfRel());
                }
        ).collect(Collectors.toList());

        return CollectionModel.of(entityModels,
                linkTo(methodOn(DesignTacoRestController.class).recentTacos()).withRel("recents"));
    }
profile
Chap Chap

0개의 댓글