2021.3.28 TIL

Sorbet·2021년 3월 28일
0

REST-ful ???...?

여기링크로 대체

REST API 관점에서 바라보는 HTTP 상태 코

GET과 POST

  • get이든 post 든 일단, 클라이언트 측에서 >> 서버로 전송하는 메시지의 성격을 의미하는데
    • GET : 서버야 이것좀 줄래? >> 데이터 읽기
    • POST : 서버야 이것좀 고쳐라/써라 >> 데이터 쓰기
 @PostMapping("/create")
  • 위 한줄이 잘못된 이유는
    : Post가 이미 뭔가를 Write하는걸 암시하는데, 굳이 또 create 라고 생성한다라고 두번 쓸 필요 없다.






JSON 무한참조를 끊어내는법

@OneToMany(mappedBy = "question")
@JsonManagedReference
@OrderBy("id ASC")
private List<Answer> answers;
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_answer_to_question"))
@JsonBackReference
private Question question;

Spring에서 Controller와 RestController 차이

출처 : https://mangkyu.tistory.com/49

기본 컨트롤러 (VIEW)

  • @Controller는 주로 View를 반환하기 위해 사용하며 아래 과정을 거침
    • Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
    • Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
    • Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
    • @Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 렌더링합니다.

데이터 컨트롤러 (Data)

  • Spring MVC의 컨트롤러에서도 Data를 반환하기 위해서는 @ResponseBody 어노테이션을 활용
    • Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
    • Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
    • @ResponseBody를 사용하여 Client에게 Json 형태로 데이터를 반환한다.
  • 여기서 데이터 전송을 위해 viewResolver 대신에 HttpMessageConverter가 동작
    • 단순 문자열인 경우에는 StringHttpMessageConverter가 사용
    • 객체인 경우에는 MappingJackson2HttpMessageConverter가 사용되며,
    • 데이터 종류에 따라 서로 다른 MessageConverter가 작동

REST 컨트롤러(REST)

  • Json 형태로 객체 데이터를 반환하는 컨트롤러
    • Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
    • Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
    • RestController는 해당 요청을 처리하고 데이터를 반환한다.






DTO (데이터를 전달하는 객체)

출처 : https://www.dazhuanlan.com/2020/05/21/5ec63e9a6c093/

@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MemberSignupRequest {

    @Valid
    private Email email;
    @Valid
    private Name name;
    @Valid
    private Password password;

    public Member toMember(){
        return new Member(email, password, name);
    }
}

HTTP 상태코드 with HTTP

  • 코드를 입력하세요
profile
Sorbet is good...!

0개의 댓글