일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 개발자블로그
- 스파르타내일배움캠프
- 국비
- 자바
- AWS
- 99클럽
- 백준
- 컴퓨터개론
- MySQL
- 중심사회
- 운영체제
- 스파르타내일배움캠프TIL
- 부트캠프
- 99일지
- 내일배움캠프
- Flutter
- 컴퓨터구조론 5판
- 스파르타코딩클럽
- 코딩테스트
- 항해
- wil
- 개발자스터디
- 프로그래머스
- til
- 개인공부
- Spring
- java
- 소프트웨어
- 스파르타내일배움캠프WIL
- Python
- Today
- Total
컴공생의 발자취
ResponseEntity 및 ExceptionHandler 본문
💡 오늘의 학습 키워드
- 개인과제 -
ResponseEntity
ExceptionHandler
Swagger
Validation
ResponseEntity
: HTTP 요청(Request) 또는 응답(Response)에 해당하는HttpHeader와 HttpBody를 포함하는 클래스
- 내가 작성한 코드(더보기 ..Click)
* CommonResponse.java
package com.nbcamp.agendaappserver;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class CommonResponse<T> {
private Integer statusCode;
private String msg;
private T data;
}
* entity/Agenda
package com.nbcamp.agendaappserver.entity;
import com.nbcamp.agendaappserver.dto.AgendaRequestDto;
import jakarta.persistence.*;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Size;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDate;
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Getter
@EntityListeners(AuditingEntityListener.class) // 자동으로 시간을 넣어주는 기능을 하게 해 줌
@Table(name = "agenda") // 매핑할 테이블의 이름을 지정
@NoArgsConstructor
public class Agenda{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Setter
@Column(name = "title", nullable = false)
@Size(max = 200, message = "제목은 200자 이내로 작성해주세요.")
private String title;
@Setter
@Column(name = "content")
private String content;
@Setter
@Column(name = "manager")
@Email(message = "이메일 형식으로 입력해주세요.")
private String manager;
@Column(name = "psword", nullable = false)
private String psword;
@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.DATE)
private LocalDate createdAt;
@Builder
public Agenda(String title, String content, String manager, String psword) {
this.title = title;
this.content = content;
this.manager = manager;
this.psword = psword;
}
public void update(AgendaRequestDto requestDto) {
this.title = requestDto.getTitle();
this.content = requestDto.getContent();
this.manager = requestDto.getManager();
}
}
* dto/AgendaRequestDto.java
package com.nbcamp.agendaappserver.dto;
import com.nbcamp.agendaappserver.entity.Agenda;
import lombok.Getter;
@Getter
public class AgendaRequestDto {
private String title;
private String content;
private String manager;
private String psword;
public Agenda toEntity() {
return Agenda.builder()
.title(title)
.content(content)
.manager(manager)
.psword(psword)
.build();
}
}
* controller/AgendaController.java
@PostMapping("/agenda")
@Operation(summary = "일정 작성", description = "일정을 작성할 때 사용하는 API")
@ApiResponse(responseCode = "200", description = "생성이 완료 되었습니다.", content = @Content(mediaType = "application/json"))
@Parameters({
@Parameter(name = "title", description = "일정 제목", example = "일정 제목"),
@Parameter(name = "content", description = "일정 내용", example = "일정 내용"),
@Parameter(name = "manager", description = "담당자", example = "qwer1234@naver.com"),
@Parameter(name = "psword", description = "비밀번호", example = "qwer1234!")
})
public ResponseEntity<CommonResponse<AgendaResponseDto>> createAgenda(@Valid @RequestBody AgendaRequestDto requestDto) {
Agenda agenda = agendaService.createAgenda(requestDto);
AgendaResponseDto response = new AgendaResponseDto(agenda);
return ResponseEntity.ok()
.body(CommonResponse.<AgendaResponseDto>builder()
.statusCode(HttpStatus.OK.value())
.msg("생성이 완료 되었습니다.")
.data(response)
.build());
}
* repository/AgendaReposiroty.java
* service/AgendaService.java
* 참고한 블로그
ExceptionHandler
* 참고한 블로그
Swagger
* 참고한 블로그
Validation
* 참고한 블로그
지난 날의 궁금증
- Q : PUT vs POST?
- PUT : resource 전체 갱신 (놓겠다 / 넣겠다)
- POST : resource 생성(보내겠다)
- Q : 참조는 reference인데 자바는 call by value로만 동작하는 것 아닌가?
- 주소값을 복사해서 넘기기에 그게 call by value방식과 같이 동작하기 때문
- 아직 찾아보지 못 한 궁금증(더보기 ..Click!)
- Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
- Q : Object.equals와 str.equals의 차이? // 요건 공식 문서를 찾아봐야겠어..
- Q : JDBC 이란?
- Q : ORM 이란?
- Q : 객체의 불변성에 대해 궁금...?
코드 카타
* 프로그래머스로 진행
- 알고리즘
- 최대공약수, 최소공배수
- 3진법 뒤집기
* 참고한 블로그
- SQL
- 인기있는 아이스크림
- 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
면담
지금까지 과제나 강의를 보면서 어려운 점은 없었는지 진도를 어느정도 했는지에 대해 간략하게 대화를 나눴다.내가 어렵다고 했던? 내용은 다음과 같다.
- ResponseEntity에 대해 과제 해설이 아닌 강의에서 설명해주었다면 좋았을텐데
- Query String vs Param 에 대한 고민
- 어떻게 해야 RESTful한 API를 작성하게 될까
대략 요정도의 고민에 대해 말하면서 내가 과제를 시작할 때 너무 시작부터 잘하려다 보니 거부감을 느끼는 것 같다고 하셨다. 역시 튜터님 예리하시다ㅠ 맞는 말이다.. 시작하기 전에 최대한 공부하고 한 번에 잘하려다 보니 과제 시작을 미룰 수 있을 때까지 또는 내가 이해해서 제대로 프로젝트를 만들 수 있겠다는 확신이 어느정도 들어야 시작하는 것 같다..
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
글쎄 과제 재제출이라서 최대한 몰입해서 한 것 같은데..
- 오늘의 생각
공부할게 넘쳐난다아악!!!
너무 많아.. 그래도 없는 것보단 낫지
- 내일 학습할 것은 무엇인지
너무 많아서 지금까지 내가 공부하려고 했던 것도 다 못해서 시간이 조금 촉박해지는 느낌
자료구조 + 알고리즘도 못했고 java 문법 관련이랑 기본적인 개념들을 아직 숙지하지 못해서 그것도 공부해야 하고
내일부터 새로운 강의 들어오니 그것도 봐야돼!
'💚 Spring' 카테고리의 다른 글
단위 테스트란 무엇일까? (2) | 2024.06.13 |
---|---|
Entity 연관 관계 (0) | 2024.05.23 |
Entity 상태 및 MySQL CLC 명령어 (1) | 2024.05.17 |
3 Layer Architecture와 SQL (0) | 2024.05.16 |
Spring 입문 (0) | 2024.05.14 |