반응형
컨트롤러 레벨에서 사용자 지정 예외 및 처리를 발생시키지 않고 서비스 계층에서 ResponseStatusException을 직접 발생시킬 수 있습니까?
Spring 5에는 Response Status Exception이 도입되었습니다. 서비스 계층에서 이 예외를 직접 적용하는 것이 좋은 방법입니까?
사례 1:
@Service
public class UserService {
public User findUserByName(String username) {
User user = userRepository.findByUsernName(username);
if(null == user) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "user not found");
}
}
}
사례 2: 아니면 사용자 지정 예외를 사용하여 컨트롤러 수준에서 처리해야 합니까?우리는 관습을 따르고 있습니다.예외 및 throwing ResponseStatusException 이 경우, 왜 우리는 다음과 같이 하지 않고 사용자 지정 예외를 다시 잡아야 합니까?Case 1
@Service
public class UserService {
public User findUserByName(String username) {
User user = userRepository.findByUsernName(username);
if(null == user) {
throw new UserNotFoundException("user not found");
}
}
}
@RestController
public class UserController {
@GetMapping(path="/get-user")
public ResponseEntity<User> getUser(String username) {
try {
userService.findUserByName(username);
} catch (UserNotFoundException ex) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "user not found");
}
}
}
댓글에 언급된 것처럼, 당신은 당신의 오류에 매핑을 만들 수 있습니다.그러면 컨트롤러에서 시도 블록을 사용할 필요가 없습니다.
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "user not found")
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
언급URL : https://stackoverflow.com/questions/59626027/can-we-directly-throw-responsestatusexception-from-service-layer-without-throwin
반응형
'programing' 카테고리의 다른 글
hibernate.load로 loader 'app'의 이름 없는 모듈에 있는 "is"를 수정하는 방법 (0) | 2023.07.20 |
---|---|
Spring Boot이 로그를 콘솔로 인쇄하지 못하도록 방지 (0) | 2023.07.20 |
ODBC 관리자가 Oracle TNS 이름 파일을 찾을 수 없음 (0) | 2023.07.20 |
Spring Cloud - Zuul Proxy가 'Access-Control-Allow-Origin' Ajax 응답을 생성하지 않습니다. (0) | 2023.07.20 |
포맷 후 NUMBER 열에 ####이 표시되는 이유는 무엇입니까? (0) | 2023.07.20 |