如何在 Spring-Boot 中捕获 属性 的 NumberFormatException?
How to catch a NumberFormatException for a property in Spring-Boot?
我有以下 属性:
@RequiredArgsConstructor
@SpringBootApplication
public class ConsoleApp implements CommandLineRunner {
@Value("${numberOfDocs:10}")
private int numberOfDocuments;
如果我的用户不顾所有警告和说明,决定将此变量的非整数值放入 application.properties?
,有没有办法捕获 NumberFormatException ?
我不能只在这个变量周围放置一个 try-catch 块。那么我的其他选择是什么?
您可以定义一个自定义构造函数,将参数作为 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
,因为我使用了自定义构造函数。
你也可以使用@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;
}
}
}
我有以下 属性:
@RequiredArgsConstructor
@SpringBootApplication
public class ConsoleApp implements CommandLineRunner {
@Value("${numberOfDocs:10}")
private int numberOfDocuments;
如果我的用户不顾所有警告和说明,决定将此变量的非整数值放入 application.properties?
,有没有办法捕获 NumberFormatException ?我不能只在这个变量周围放置一个 try-catch 块。那么我的其他选择是什么?
您可以定义一个自定义构造函数,将参数作为 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
,因为我使用了自定义构造函数。
你也可以使用@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;
}
}
}