여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] PostApiControllerTest.java (게시글 등록)

여니's 2022. 3. 22. 14:57

Posts.java (Entity 클래스)

 


PostsRepository.java

 


PostSaveRequestDto.class (web -> dto)

 


PostsService.java (서비스)

 

 


PostsApiController (컨트롤러)

 


 

등록하기 테스트

@Test
public void Posts_등록된다() throws Exception{
    //given
    String title="title1";
    String content="content1";
    PostSaveRequestDto requestDto=PostSaveRequestDto.builder()
            .title(title)
            .content(content)
            .author("author")
            .build();
    String url="http://localhost:"+port+"/api/vi/posts"; // PostApiController에 PostMapping부분에 있는 곳이랑 위치가 똑같아야함.

    //when
    ResponseEntity<Long> responseEntity = restTemplate.
            postForEntity(url,requestDto,Long.class);

    //then
    assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
    assertThat(responseEntity.getBody()).isGreaterThan(0L);

    List<Posts> all=postsRepository.findAll();
    assertThat(all.get(0).getTitle()).isEqualTo(title);
    assertThat(all.get(0).getContent()).isEqualTo(content);
}

 

 

 

RestTemplate이란?

 

: 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿입니다.

즉 다른 서버의 API endpoint를 호출할 때 RestTemplate을 많이 씁니다.

 

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

 

ResponseEntity (Spring Framework 5.3.17 API)

Extension of HttpEntity that adds an HttpStatus status code. Used in RestTemplate as well as in @Controller methods. In RestTemplate, this class is returned by getForEntity() and exchange(): ResponseEntity entity = template.getForEntity("https://example.co

docs.spring.io

 

HTTP 서버와의 통신을 단순화하고

RESTful 원칙을 지킵니다.

HttpClient를 HttpEntity의 json, xml 등으로

추상화해서 제공해줍니다.

RestTemplate을 쓰지 않는다면,

json, xml 라이브러리를 사용하여

직접 변환해야 합니다. 

 

 

postForEntity의 구조는 이렇습니다.

Post 요청을 보내는 메서드로

매개변수로 url과 request 객체와 response 타입을 넘겨줍니다.

그러면 return으로 ResponseEntity를 반환해줍니다!

 

 

getBody()

-> entity의 body를 리턴해줍니다.

 

 

 

 

RestTemplate 참고 출처 

 

https://velog.io/@seongwon97/Spring-Boot-Rest-Template

 

[Spring Boot] Rest Template

Rest Template이란? Spring은 REST 서비스의 endpoint를 호출하는 2가지 방법을 제공한다. 방법은 동기, 비동기 방식이 존재하며 이번 Post에서는 동기 방식인 REST template에 대해 알아보고자 한다. REST Template

velog.io

 

 

 

 


참고서적 및 링크

: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스