我有以下服务类别:
@Service
public class CitiesServiceImpl implements CitiesService {
@Autowired
private CitiesRepository citiesRepository;
@Override
public City getCityById(Integer cityId) {
return citiesRepository.findById(cityId)
.orElseThrow(ResourceNotFoundException::new);
}
}
它在我的控制器中使用:
@RestController
@RequestMapping("/cities")
public class CitiesController {
@Autowired
private CitiesService citiesService;
@GetMapping("/{cityId}")
public City readCity(@PathVariable Integer cityId) {
return citiesService.getCityById(cityId);
}
@ExceptionHandler(ResourceNotFoundException.class)
String handleResourceNotFound(Exception e) {
return e.getMessage();
}
}
因此,当使用不存在的readCity
调用cityID
时,将抛出ResourceNotFoundException
,然后由handleResourceNotFound
异常处理程序进行处理。
但是,在处理ResouceNotFoundException
时,响应中的状态代码仍为202,即确定。似乎在运行时未使用@ResponseStatus
中的ResourceNotFoundException
注释。可以通过将@ResponseStatus(value = HttpStatus.NOT_FOUND)添加到方法handleResourceNotFound
来解决此问题,但是由于@ResponseStatus
注释中已经包含ResourceNotFoundException
,所以这些代码是重复的。
问题:如何利用ResponseStatus
的{{1}}注释而不是添加重复的代码?
答案 0 :(得分:0)
删除该handleResourceNotFound
并让框架为您处理,或者从Response
方法返回正确的handleResourceNotFound
。
通过声明这样的处理程序,您是说您将处理这种情况,因此框架正在退出。