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