Spring 5 引入了 ResponseStatusException,直接从服务层抛出这个异常是不是一个好习惯。
案例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:
还是我们需要使用自定义异常并在 Controller 级别处理它?在这种情况下,我们正在捕获 CustomException 并抛出 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");
}
}
}
最佳答案
正如评论中提到的,您可以在错误中创建映射。那么你不需要在 Controller 中使用 try 块。
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);
}
}
关于java - 是否可以直接从服务层抛出ResponseStatusException,而无需在 Controller 层面抛出自定义异常和处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59626027/