728x90
ResponseEntity ?
Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다.
이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpStatus, HttpHeaders, HttpBody를 포함한다.
참고 https://devlog-wjdrbs96.tistory.com/182
프로젝트에서 활용
장바구니가 추가 기능에서 활용하였다.
값이 NULL일 경우, 장바구니 추가 가능 / 값이 NULL이 아닐 경우, 예외처리
에러 클래스
package com.example.shopping.common;
public class RestError {
private String id;
private String message;
public RestError(String id, String message) {
this.id = id;
this.message = message;
}
public String getId() {
return id;
}
public String getMessage() {
return message;
}
}
상태 메세지 클래스
package com.example.shopping.common;
public class RestResult<T> {
private String status; // 상태
private T data; // 메시지
public RestResult(String status, T data) {
this.status = status;
this.data = data;
}
public String getStatus() {
return status;
}
public T getData() {
return data;
}
}
Controller에서 타입을 ReponseEntity(응답)로 지정.
// CartController 내부
package com.example.shopping.cart.controller;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/cart")
@CrossOrigin("*")
public class CartController {
private final CartService cartService;
// 장바구니에 상품 추가
@PostMapping("/insertCart/{memberSeq}/{productSeq}")
public ResponseEntity<RestResult<Object>> insetCart(@PathVariable("memberSeq")Long memberSeq
, @PathVariable("productSeq")Long productSeq){
return cartService.insertCart(memberSeq, productSeq);
}
}
CartService에서 값이 NULL일 경우, 장바구니 추가 가능 / 값이 NULL이 아닐 경우, 예외처리
// CartService 내부
package com.example.shopping.cart.service;
@Service
@RequiredArgsConstructor
public class CartService {
private final CartRepository cartRepository;
// 장바구니에 상품 추가
public ResponseEntity<RestResult<Object>> insertCart(Long memberSeq, Long productSeq){
Cart findByMemberAndProduct = cartRepository.findByMember_MemberSeqAndProduct_ProductSeq(memberSeq, productSeq);
if (findByMemberAndProduct != null) {
return ResponseEntity.status(HttpStatus.CONFLICT)
.body(new RestResult<>("error", new RestError("duplicate_cart", "이미 장바구니에 추가된 상품입니다.")));
}
Cart cart = Cart.builder()
// .member(findByMemberAndProduct.getMember()) // null이라서 오류.
// 왜 null? 지금 여기서 memberSeq, productSeq를 넣어주는 거임.
// findByMemberAndProduct 이건 값을 넣어주는게 아니라, 값이 있나없나 확인하는 용
.member(Member.builder().memberSeq(memberSeq).build())
.product(Product.builder().productSeq(productSeq).build())
.build();
Cart save = cartRepository.save(cart);
return ResponseEntity.ok(new RestResult<>("success", "장바구니 추가가 완료되었습니다."));
}
}
// CartRepository 내부
package com.example.shopping.cart.repository;
@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {
Cart findByMember_MemberSeqAndProduct_ProductSeq(Long memberSeq, Long productSeq);
}
참고
https://devlog-wjdrbs96.tistory.com/182
'공부 > Spring Boot' 카테고리의 다른 글
@SQLRestriction 어노테이션: 사용법과 장단점 분석 (1) | 2024.11.20 |
---|---|
[Java] Spring Boot - JPA @PrePersist, @PreUpdate (0) | 2024.11.20 |
Spring Boot Webflux란 (0) | 2024.01.12 |