인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

모든 개발자를 위한 HTTP 웹 기본 지식

4xx - 클라이언트 오류, 5xx - 서버 오류

안녕하세요 이 코드는 잘못된건가요?

작성

·

241

0

RestController 가 있습니다
@PostMapping("/request")
	public ResponseEntity<> save(someDto dto) throws UnsupportedEncodingException, Exception {
		if(isAdmin()){
			return new ResponseEntity<>( 어드민이 아닙니다,HttpStatus.BAD_REQUEST);
		}
		try {
		        AService.save(dto.toEntity());   // 주문 생성
			BService.createEstimate(dto.toEntity());  // 견적 생성
		} catch (Exception e) {
			return new ResponseEntity<>(저장이 안되었다는 메세지,HttpStatus.BAD_REQUEST);
		}
		return new ResponseEntity<>(저장이 되었다는 메세지,HttpStatus.OK);
	}

AService입니다
@Transactional(rollbackFor = {Exception.class})
	public void save(Entity entity) throws Exception{
		entityRepo.save(entity);
	}

BService입니다
@Transactional(rollbackFor = {Exception.class})
	public void createEstimate(Entity entity) throws Exception {
		entityRepo.save(entity);
	}

위와 같이 rest controller에도 throw exception과 동시에 저장,견적 을 생성하는 서비스를 각각 호출합니다.(서로 다른 클래스)
그런데 그 서비스에도 다 throw exception을 하고 있습니다.
어노테이션으로 Transactional(rollbackFor exception)을 하고 있고요.
위와 같이 코드를 작성하는 방법은 틀린것인가요?

답변 1

1

안녕하세요. WON JONGPIL님, 공식 서포터즈 David입니다.
.

올려주신 코드만 보았을 때 아래 내부로직은 동일해보이는데, 굳이 동일한 일을 2번 해주시는 이유를 알 수 있을까요?

AService.save(dto.toEntity());

BService.createEstimate(dto.toEntity());

.

만약 동일한 로직이 아니라면 내부에 어떻게 동작하는지 구체적인 로직을 보여주셔야 조금 더 자세한 답변을 드릴 수 있을 것 같습니다.

.
감사합니다.

아, 그러셨군요.

ControllerAdvice에 대해 찾아보시면 예외를 깔끔하게 처리하고 응답할 수 있을 것 같습니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기