简体   繁体   English

如何使用Spring Boot在模板化的Excel文件中附加JSON数据?

[英]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种服务于POSTPUT请求以遵循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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM