【发布时间】:2021-02-14 03:23:16
【问题描述】:
晚上好,优秀的程序员, 我是 Spring Boot 新手,在以下设置中看不到我做错了什么。
application.properties 有 io.input_file = "C:\Projects\validation\validation_input.csv"
ApplicationController.java 将 io.input_file 读入 inputFilename 字段并正确输出。 我看到 /parameters 网页上显示的文件名正确
ValidationApplication.java 的 main() 调用 List inputRows = new CsvReader().read(); OpenCSV 读取器和写入器正确查找和处理 CSV 文件内容。
我的问题是 CsvReader.java 有 C:\Projects\validation\validation_input.csv 文件名硬编码。 我想用 ValidationController.inputFilename 替换硬编码的文件名 它始终为空!
我不理解或遗漏了什么? 先感谢您, 电子人
application.properties 文件:
endpoint.url = "http://192.168.7.180:7150/api/latest/ngene/search"
io.input_file = "C:\\Projects\\validation\\validation_input.csv"
io.output_file = "C:\\Projects\\validation\\validation_output.csv"
io.output_file_stats = "C:\\Projects\\validation\\validation_outputStats.csv"
// ValidationController.java
@RestController
public class ValidationController {
// Inject parameters from application.properties or application.yml: default if N/A
@Value("${endpoint.url: Endpoint URL: TBD}")
private String endpointURL; // URL can be tracked outside on confluence page
@Value("${io.input_file: input_file default path}")
private String inputFilename;
@GetMapping("/parameters")
public String readParameters() {
String output = "<b>Testing default localhost:8080/parameters</b>";
output += "<p>End point URL = " + endpointURL + "</p>";
output += "<p>Input file = " + inputFilename + "</p>";
return output;
}
}
// ValidationApplication.java:
@SpringBootApplication
public class ValidationApplication {
public static void main(String[] args) throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
SpringApplication.run(ValidationApplication.class, args);
// Lambda to print all
System.out.println("\n\n\nLambda printing of CSV data read in:");
List<InputData> inputRows = new CsvReader().read();
inputRows.forEach(inputData -> System.out.println("\t" + inputData));
List<OutputData> outputRows = new ArrayList<>();
System.out.println("\n\n\nValidationApplication::main(): reading, validating, and writing of CSV data:");
// Read each row, process, write out
for (int i = 0; i<inputRows.size(); i++) {
// Read row data
InputData inputData = inputRows.get(i);
System.out.println("\t" + i + ": " + inputData.toString());
// Validate data
System.out.println("\tValidate data here...");
// Write row data
String moreData = inputData.getData();
OutputData outputData = new OutputData(moreData);
System.out.println("\t" + i + ": " + outputData.toString() + "\n");
outputRows.add(outputData);
}
// Test the manual CSV writer with headers
CsvWriter csvWriter = new CsvWriter();
// Test the bean CSV writer without headers
csvWriter.write(outputRows);
}
}
// CsvReader.java:
public class CsvReader {
public List<InputData> read() throws FileNotFoundException {
// Get input filename
String inputFile = "C:\\Projects\\validation\\validation_input.csv";
// Create the CSV reader
FileReader fileReader = new FileReader(inputFile);
CsvToBean<InputData> csvToBean = new CsvToBeanBuilder<InputData>(fileReader)
.withType(InputData.class)
.build();
// Read/parse and close reader streams
return csvToBean.parse();
}
}
【问题讨论】:
-
向我们展示如何将 ValidationController.inputFilename 提供给 CsvReader。
-
我无法在 main() 中获取 ValidationController.inputFilename。当我得到它时,我会将它传递给构造函数,即 CsvReader(ValidationController.getInputFilename ())。挑战我的是事件的注释和顺序。
标签: java spring spring-boot properties controller