【问题标题】:Can adding a try/catch mess with the code logic可以在代码逻辑中添加 try/catch 混乱
【发布时间】:2021-10-05 15:10:26
【问题描述】:

我有这个按城市人口检索的代码:

@GetMapping("/city")
  public ResponseEntity<List<CityDto>> getPopulationPerCity {
    List<CityDto> city= cityService.getPopulationPerCity(city);
    return return ResponseEntity.ok(city);
}

而我所做的就是用这样的 try/catch 包围它,以便记录请求是否成功:

@GetMapping("/city")
public ResponseEntity<List<CityDto>> getPopulationPerCity {

List<CityDto> city = null;
try {
city= cityService.getPopulationPerCity(city);
log.info("The city population request is successful")
}  catch (Exception e) {
log.info("The city population request is failed")
}
return ResponseEntity.ok(city);

这会以任何方式影响背后的逻辑吗?

【问题讨论】:

  • 否,但如果前端不处理空值,它可能会影响逻辑

标签: java try-catch


【解决方案1】:

首先你需要修复如下编译问题,你已经在方法中声明了两次城市:

GetMapping("/city")
public ResponseEntity<List<CityDto>> getPopulationPerCity {

List<CityDto> city = null;
try {
city= cityService.getPopulationPerCity(city);
log.info("The city population request is successful")
}  catch (Exception e) {
log.info("The city population request is failed")
}
return ResponseEntity.ok(city);
}

它不会影响这个方法逻辑,但是如果有其他方法正在做一些特殊的事情,如果发生异常,那么就会受到影响。他们需要处理这个空值。

所以如果我们只从这个方法的角度来看,答案是 NO,但如果我们从更大的角度来看,答案是 YES,这可能会影响系统逻辑。

【讨论】:

    【解决方案2】:

    你说:

    我所做的就是用这样的 try/catch 包围它 命令记录请求是否成功:

    这会以任何方式影响背后的逻辑吗?

    所以答案是否定的。

    【讨论】:

      【解决方案3】:

      首先,我建议从返回类型中删除 ResponseEntity&lt;List&lt;CityDto&gt;&gt;。你很可能不需要它。 Spring 会处理它。

      要回答您的问题,请在您提供的特定代码中:

      @GetMapping("/city")
      public ResponseEntity<List<CityDto>> getPopulationPerCity {
      
      List<CityDto> city = null;
      try {
      List<CityDto> city= cityService.getPopulationPerCity(city);
      log.info("The city population request is successful")
      }  catch (Exception e) {
      log.info("The city population request is failed")
      }
      return ResponseEntity.ok(city);
      

      这行不通。因为你的city 变量的范围。如果您检查您的尝试,您可以看到您正在创建另一个名称相同的列表,但它将在 try 块内,而不是在外面。因此完全独立于您的城市服务,它将返回null。或者更好的说法是因为重新声明它而在你的 IDE 中抛出一个错误。

      您可以做的是在 try 块中添加 return 语句,并在方法的末尾返回一个空列表。这比 null 要好得多。

      但一般的答案确实会影响逻辑,不会。

      【讨论】:

        猜你喜欢
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多