-
Notifications
You must be signed in to change notification settings - Fork 133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Spring Core] 안준영 미션 제출합니다. #306
base: main
Are you sure you want to change the base?
Changes from 37 commits
316a28e
86dcc4d
633f3fa
cc436f5
9f2966a
fcfc498
ddb26a9
598103c
be66739
08c7387
6c5bfc9
35a3e5a
cc73923
48c3027
deb6d02
ce883c0
e6ad343
b7b92b0
c5b300e
1a7d4cb
520a3db
9a92583
878d9dd
80f0f20
976c1de
12561a7
7246d92
bb9ddc2
cadabba
d55847c
4f515e3
e47f4a0
6d117be
f93e66f
cbec7ba
57bbf2e
ee69a26
8c9ff70
3a3a85b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package roomescape.controller; | ||
|
||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.stereotype.Controller; | ||
import org.springframework.web.bind.annotation.*; | ||
import org.springframework.web.util.UriComponentsBuilder; | ||
import roomescape.domain.Reservation; | ||
import roomescape.dto.ReservationDto; | ||
import roomescape.service.ReservationService; | ||
|
||
import java.net.URI; | ||
import java.util.List; | ||
|
||
@Controller | ||
public class RoomescapeController { | ||
|
||
private final ReservationService reservationService; | ||
|
||
public RoomescapeController(ReservationService reservationService) { | ||
this.reservationService = reservationService; | ||
} | ||
|
||
@GetMapping("/reservation") | ||
public String reservation() { | ||
return "new-reservation"; | ||
} | ||
|
||
@GetMapping("/reservations") | ||
@ResponseBody | ||
public ResponseEntity<List<ReservationDto>> getAllReservations(){ | ||
List<ReservationDto> reservations = reservationService.getAllReservations(); | ||
return new ResponseEntity<>(reservations, HttpStatus.OK); | ||
} | ||
|
||
@PostMapping("/reservations") | ||
public ResponseEntity<?> createReservation(@RequestBody ReservationDto reservationDto) { | ||
try { | ||
Reservation reservation = reservationService.addReservation(reservationDto); | ||
URI location = UriComponentsBuilder.fromPath("/reservations/{id}") | ||
.buildAndExpand(reservation.getId()) | ||
.toUri(); | ||
return ResponseEntity.created(location).body(reservation); | ||
} catch (IllegalArgumentException e) { | ||
return ResponseEntity.badRequest().body(e.getMessage()); | ||
} | ||
} | ||
Comment on lines
+36
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
return ResponseEntity.status(HttpStatus.CREATED)
.header("Location 헤더 설정")
.header("필요한 다른 헤더들~~")
.body("본문 객체"); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 추가로 Controller에서 try-catch 블럭을 통해 예외를 잡아서 처리하는 것보다는 미션 학습 자료에 있는 |
||
|
||
@DeleteMapping("/reservations/{id}") | ||
@ResponseBody | ||
public ResponseEntity<Reservation> deleteReservation(@PathVariable int id){ | ||
try { | ||
reservationService.deleteReservation(id); | ||
return new ResponseEntity<>(HttpStatus.NO_CONTENT); | ||
} catch (IllegalArgumentException e) { | ||
return ResponseEntity.badRequest().body(null); | ||
} | ||
} | ||
|
||
Junyeong-An marked this conversation as resolved.
Show resolved
Hide resolved
|
||
@ExceptionHandler(IllegalArgumentException.class) | ||
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException e) { | ||
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,53 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
package roomescape.controller; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import java.util.List; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.http.HttpHeaders; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.http.HttpStatus; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.http.ResponseEntity; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.DeleteMapping; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.GetMapping; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.PathVariable; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.PostMapping; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestBody; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.RequestMapping; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.ResponseBody; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.web.bind.annotation.RestController; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import roomescape.dto.TimeDto; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import roomescape.dto.TimeResDto; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import roomescape.service.TimeService; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@RestController | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@RequestMapping("/times") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public class TimeController { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
private final TimeService timeService; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public TimeController(TimeService timeService) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.timeService = timeService; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@PostMapping | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@ResponseBody | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public ResponseEntity<TimeResDto> addTime(@RequestBody TimeDto timeDto) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TimeResDto timeResDto = timeService.addTime(timeDto); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HttpHeaders headers = createHeader("/times/" + timeResDto.id()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return new ResponseEntity<>(timeResDto, headers, HttpStatus.CREATED); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Junyeong-An marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 앗... 깜박했네요 감사합니다...😅 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
private HttpHeaders createHeader(String path) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HttpHeaders headers = new HttpHeaders(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
headers.add("Location", path); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return headers; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@GetMapping | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public ResponseEntity<List<TimeResDto>> getAllTimes() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
List<TimeResDto> times = timeService.getAllTimes(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return new ResponseEntity<>(times, HttpStatus.OK); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@DeleteMapping("/{id}") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public ResponseEntity<Void> deleteTime(@PathVariable int id) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timeService.deleteTime(id); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package roomescape.dao; | ||
|
||
import org.springframework.dao.EmptyResultDataAccessException; | ||
import org.springframework.jdbc.core.JdbcTemplate; | ||
import org.springframework.stereotype.Repository; | ||
import roomescape.domain.Reservation; | ||
import roomescape.domain.Time; | ||
|
||
import java.util.List; | ||
|
||
@Repository | ||
public class RoomDAO { | ||
private final JdbcTemplate jdbcTemplate; | ||
|
||
public RoomDAO(JdbcTemplate jdbcTemplate) { | ||
this.jdbcTemplate = jdbcTemplate; | ||
} | ||
|
||
public List<Reservation> findAll() { | ||
return jdbcTemplate.query("SELECT r.id as reservation_id, r.name, r.date, t.id as time_id, t.time as time_value " + | ||
"FROM reservation as r inner join time as t on r.time_id = t.id", | ||
(resultSet, rowNum) -> new Reservation( | ||
resultSet.getInt("reservation_id"), | ||
resultSet.getString("name"), | ||
resultSet.getString("date"), | ||
new Time(resultSet.getInt("time_id"), resultSet.getString("time_value")) | ||
)); | ||
} | ||
Comment on lines
+19
to
+28
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 문자열을 더하기 연산으로 나누다 보니 가독성이 조금 떨어지는 것 같아요.
|
||
|
||
public void insert(Reservation reservation) { | ||
jdbcTemplate.update("INSERT INTO reservation (name, date, time_id) VALUES (?, ?, ?)", | ||
reservation.getName(), reservation.getDate(), reservation.getTime().getId()); | ||
} | ||
|
||
public void deletebyId(int id) { | ||
jdbcTemplate.update("DELETE FROM reservation WHERE id = ?", id); | ||
} | ||
|
||
public int getId(Reservation reservation) { | ||
return jdbcTemplate.queryForObject("SELECT id FROM reservation WHERE name = ? AND date = ? AND time_id = ?", | ||
Integer.class, reservation.getName(), reservation.getDate(), reservation.getTime().getId()); | ||
} | ||
|
||
public Reservation findById(int id) { | ||
try { | ||
return jdbcTemplate.queryForObject("SELECT r.id as reservation_id, r.name, r.date, t.id as time_id, t.time as time_value " + | ||
"FROM reservation as r inner join time as t on r.time_id = t.id WHERE r.id = ?", | ||
(resultSet, rowNum) -> new Reservation( | ||
resultSet.getInt("reservation_id"), | ||
resultSet.getString("name"), | ||
resultSet.getString("date"), | ||
new Time(resultSet.getInt("time_id"), resultSet.getString("time_value")) | ||
), id); | ||
} catch (EmptyResultDataAccessException e) { | ||
throw new IllegalArgumentException("찾는 id가 존재하지 않습니다!"); | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package roomescape.dao; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
import org.springframework.jdbc.core.JdbcTemplate; | ||
import org.springframework.stereotype.Repository; | ||
import roomescape.domain.Time; | ||
|
||
@Repository | ||
public class TimeDAO { | ||
private final JdbcTemplate jdbcTemplate; | ||
|
||
public TimeDAO(JdbcTemplate jdbcTemplate) { | ||
this.jdbcTemplate = jdbcTemplate; | ||
} | ||
|
||
public void insert(Time time) { | ||
jdbcTemplate.update("INSERT INTO time (time) VALUES (?)", | ||
time.getTime()); | ||
} | ||
|
||
public Optional<Integer> getId(Time time) { | ||
return jdbcTemplate.query( | ||
"SELECT id FROM time WHERE time = ? LIMIT 1", | ||
(rs, rowNum) -> rs.getInt("id"), | ||
time.getTime() | ||
).stream().findFirst(); | ||
} | ||
|
||
public List<Time> findAll() { | ||
return jdbcTemplate.query("SELECT * FROM time", (rs, rowNum) -> | ||
new Time(rs.getInt("id"), rs.getString("time")) | ||
); | ||
} | ||
|
||
public void delete(int id) { | ||
jdbcTemplate.update("DELETE FROM time WHERE id = ?", id); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. public void deletebyId(int id) {
jdbcTemplate.update("DELETE FROM reservation WHERE id = ?", id);
} 준영이 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 일관성을 위해 그게 더 좋은 것 같네요 감사합니다! |
||
|
||
public Optional<Time> findByTime(String time) { | ||
return jdbcTemplate.query( | ||
"SELECT id, time FROM time WHERE time = ? LIMIT 1", | ||
(rs, rowNum) -> new Time(rs.getInt("id"), rs.getString("time")), | ||
time | ||
).stream().findFirst(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package roomescape.domain; | ||
|
||
public class Reservation { | ||
private int id; | ||
|
||
private String name; | ||
private String date; | ||
private Time time; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. id와 나머지 필드를 줄바꿈을 통해 구분한 특별한 이유가 있나요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 특별한 이유는 없습니다... 수정하는 게 좋을 것 같습니다! |
||
|
||
public Reservation(int id, String name, String date, Time time) { | ||
this.id = id; | ||
this.name = name; | ||
this.date = date; | ||
this.time = time; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public int getId() { | ||
return id; | ||
} | ||
|
||
public String getDate() { | ||
return date; | ||
} | ||
|
||
public Time getTime() { | ||
return time; | ||
} | ||
|
||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 불필요한 공백은 제거하면 좋을 것 같아요 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 공백이 있었네요 감사합니다...! 😲 |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package roomescape.domain; | ||
|
||
public class Time { | ||
private int id; | ||
private String time; | ||
|
||
public Time(int id, String time) { | ||
this.id = id; | ||
this.time = time; | ||
} | ||
|
||
public String getTime() { | ||
return time; | ||
} | ||
|
||
public void setTime(String time) { | ||
this.time = time; | ||
} | ||
|
||
public int getId() { | ||
return id; | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package roomescape.dto; | ||
|
||
import roomescape.domain.Time; | ||
|
||
public record ReservationDto( | ||
String name, String date, Time time | ||
) { | ||
public static ReservationDto from(String name, String date, Time time) { | ||
return new ReservationDto(name, date, time); | ||
} | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. record와 정적팩토리 메서드를 사용하신 이유가 궁금합니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package roomescape.dto; | ||
|
||
public record TimeDto( | ||
String time | ||
) { | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package roomescape.dto; | ||
|
||
import roomescape.domain.Time; | ||
|
||
public record TimeResDto( | ||
int id, String time | ||
) { | ||
public static TimeResDto from(Time time) { | ||
return new TimeResDto(time.getId(), time.getTime()); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,53 @@ | ||||||||||||||||||||||||||||||
package roomescape.service; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
import java.util.List; | ||||||||||||||||||||||||||||||
import java.util.stream.Collectors; | ||||||||||||||||||||||||||||||
import org.springframework.stereotype.Service; | ||||||||||||||||||||||||||||||
import org.springframework.transaction.annotation.Transactional; | ||||||||||||||||||||||||||||||
import roomescape.dao.RoomDAO; | ||||||||||||||||||||||||||||||
import roomescape.domain.Reservation; | ||||||||||||||||||||||||||||||
import roomescape.domain.Time; | ||||||||||||||||||||||||||||||
import roomescape.dto.ReservationDto; | ||||||||||||||||||||||||||||||
import roomescape.dto.TimeResDto; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Service | ||||||||||||||||||||||||||||||
public class ReservationService { | ||||||||||||||||||||||||||||||
private final RoomDAO roomDAO; | ||||||||||||||||||||||||||||||
private final TimeService timeService; | ||||||||||||||||||||||||||||||
Comment on lines
+13
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 서비스에서 다른 서비스단을 의존성 주입 받으면 재사용성을 할 수 있다는 장점이 있지만 mvc패턴이 제대로 지켜지지 않아 복잡도가 증가하고 단위 테스트를 할 때도 의존성이 증가해 어려움이 있습니다. |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
public ReservationService(RoomDAO roomDAO, TimeService timeService) { | ||||||||||||||||||||||||||||||
this.roomDAO = roomDAO; | ||||||||||||||||||||||||||||||
this.timeService = timeService; | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Transactional(readOnly = true) | ||||||||||||||||||||||||||||||
public List<ReservationDto> getAllReservations() { | ||||||||||||||||||||||||||||||
return roomDAO.findAll().stream() | ||||||||||||||||||||||||||||||
.map(reservation -> new ReservationDto(reservation.getName(), reservation.getDate(), | ||||||||||||||||||||||||||||||
reservation.getTime())) | ||||||||||||||||||||||||||||||
.collect(Collectors.toList()); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
Comment on lines
+23
to
+29
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Transactional | ||||||||||||||||||||||||||||||
public Reservation addReservation(ReservationDto reservationDto) { | ||||||||||||||||||||||||||||||
String name = reservationDto.name(); | ||||||||||||||||||||||||||||||
String date = reservationDto.date(); | ||||||||||||||||||||||||||||||
String timeString = reservationDto.time().getTime(); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
TimeResDto timeResDto = timeService.findByTime(timeString); | ||||||||||||||||||||||||||||||
Time time = new Time(timeResDto.id(), timeResDto.time()); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Reservation reservation = new Reservation(0, name, date, time); | ||||||||||||||||||||||||||||||
roomDAO.insert(reservation); | ||||||||||||||||||||||||||||||
return reservation; | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Transactional | ||||||||||||||||||||||||||||||
public void deleteReservation(int id) { | ||||||||||||||||||||||||||||||
if (roomDAO.findById(id) != null) { | ||||||||||||||||||||||||||||||
roomDAO.deletebyId(id); | ||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||
throw new IllegalArgumentException("삭제할 예약이 없습니다."); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@GetMapping
과@DeleteMapping
에서는@ResponseBody
어노테이션을 사용하셨는데@PostMapping
에만 사용하지 않은 이유가 있나요??There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ResponseEntity
를 반환하는 경우 http응답 본문으로 사용되는 것을 Spring이 처리해주므로@ResponseBody
애노테이션이 필요하지 않는다고 합니다..!