[英]How to append JSON data in a templated excel file using Spring boot?
I have one template for excel file which contains header and a button in it. 我有一个excel文件模板,其中包含标题和一个按钮。 How do I append JSON data in that file using Spring Boot?
如何使用Spring Boot在该文件中附加JSON数据?
How to start appending data from a particular row in excel file and download it in a particular location? 如何开始从Excel文件中的特定行附加数据并将其下载到特定位置?
I have created a sample project to make it work, Basically I have created 2 Method to Serve for POST and PUT request to follow the REST standards , Post request will always create a file ie resource and the PUT request will Update the Data to the file ie Append the JSON text send in the request body. 我创建了一个示例项目以使其正常工作,基本上我已经创建了2种服务于POST和PUT请求以遵循REST标准的方法,Post请求将始终创建一个文件,即资源,而PUT请求会将数据更新为该文件即在请求正文中附加发送的JSON文本。
here is my Boot loader class 这是我的引导程序类
@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootWebApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootWebApplication.class, args);
}
}
Here is my configuration class which basically adds MappingJackson2HttpMessageConverter as a message converter to parse json data back and forth 这是我的配置类,主要是添加MappingJackson2HttpMessageConverter作为消息转换器来回解析json数据
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter{
@Bean
public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(customJackson2HttpMessageConverter());
}
}
And finally the controller class which maps the request to the xls creator methods 最后是将请求映射到xls创建者方法的控制器类
@Controller
public class WelcomeController {
@RequestMapping(value="/writeData", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> writeJSONDataToFile(@RequestBody(required=true) Map<String, String> input){
try {
String fileName = "C:\\Test\\Sample.xls";
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
int rownum =0;
for (Entry<String, String> entry : input.entrySet()) {
HSSFRow row = sheet.createRow(rownum++);
short cellNum = 0;
HSSFCell cell1 = row.createCell(cellNum++);
cell1.setCellValue(entry.getKey());
HSSFCell cell2 = row.createCell(cellNum++);
cell2.setCellValue(entry.getValue());
}
FileOutputStream fileOutputStream = new FileOutputStream(new File(fileName));
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("Sample.xls created successfully on disk.");
}catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<String>("Create", HttpStatus.CREATED);
}
@RequestMapping(value="/writeData", method=RequestMethod.PUT, consumes=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> updateJSONDataToFile(@RequestBody(required=true) Map<String, String> input){
try {
String fileName = "C:\\Test\\Sample.xls";
HSSFWorkbook workbook = null;
FileInputStream fileInputStream = null;
HSSFSheet sheet = null;
File file = new File(fileName);
if(file.exists()){
fileInputStream = new FileInputStream(file);
workbook = new HSSFWorkbook(fileInputStream); //Reading from file
sheet = workbook.getSheetAt(0);
}else{
return new ResponseEntity<String>("File doesnt Exists", HttpStatus.BAD_REQUEST);
}
int rownum =sheet.getLastRowNum();
for (Entry<String, String> entry : input.entrySet()) {
HSSFRow row = sheet.createRow(++rownum);
short cellNum = row.getLastCellNum();
HSSFCell cell1 = row.createCell(++cellNum);
cell1.setCellValue(entry.getKey());
HSSFCell cell2 = row.createCell(++cellNum);
cell2.setCellValue(entry.getValue());
}
if(fileInputStream!=null)
fileInputStream.close();
FileOutputStream fileOutputStream = new FileOutputStream(file);
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("Sample.xls written/Updated successfully on disk.");
}catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<String>("updated successfully", HttpStatus.OK);
}
}
I have used Apache poi-3.15-final.jar 我用过Apache poi-3.15-final.jar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.