• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

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

21.07.24 12:03 작성 조회수 171

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

David님의 프로필

David

2021.07.24

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

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

AService.save(dto.toEntity());

BService.createEstimate(dto.toEntity());

.

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

.
감사합니다.

David님의 프로필

David

2021.07.24

아, 그러셨군요.

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