【问题标题】:How to catch a NumberFormatException for a property in Spring-Boot?如何在 Spring-Boot 中捕获属性的 NumberFormatException?
【发布时间】:2021-07-18 21:30:24
【问题描述】:

我有以下属性:

@RequiredArgsConstructor
@SpringBootApplication
public class ConsoleApp implements CommandLineRunner {


    @Value("${numberOfDocs:10}")
    private int numberOfDocuments;

如果我的用户不顾所有警告和说明,决定在 application.properties 中为此变量放置一个非整数值,是否有办法捕获 NumberFormatException ?

我不能只在这个变量周围放置一个 try-catch 块。那么我还有哪些其他选择?

【问题讨论】:

    标签: java spring-boot numberformatexception


    【解决方案1】:

    您可以定义自定义构造函数,将参数作为String 并执行您的自定义逻辑:

    @SpringBootApplication
    public class ConsoleApp implements CommandLineRunner {
    
    
        @Value("${numberOfDocs:10}")
        private int numberOfDocuments;
    
        public ConsoleApp(@Value("${numberOfDocs:10}") String numberOfDocuments){
            try{
                this.numberOfDocuments=Integer.parseInt(numberOfDocuments);
            }catch(NumberFormatException e){
                this.numberOfDocuments=10;
            }
        }
    
    }
    

    请注意,我删除了 lombok @RequiredArgsConstructor,因为我使用了自定义构造函数。

    【讨论】:

      【解决方案2】:

      您也可以使用 @Value 作为参数与 setter 注入:

      @SpringBootApplication
      public class ConsoleApp implements CommandLineRunner {
      
      
          private int numberOfDocuments;
      
          @Autowired
          public void setValues(@Value("${numberOfDocs:10}") String numberOfDocuments) {
              try this.numberOfDocuments=Integer.parseInt(numberOfDocuments);
              } catch(NumberFormatException e){
                  this.numberOfDocuments=10;
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 2018-01-25
        相关资源
        最近更新 更多