zoukankan      html  css  js  c++  java
  • SpringMVC文件下载与JSON格式

    点击查看上一章

    现在JSON这种数据格式是被使用的非常的广泛的,SpringMVC作为目前最受欢迎的框架,它对JSON这种数据格式提供了非常友好的支持,可以说是简单到爆。

    在我们SpringMVC中只需要添加jackjson的jar包后RequestMappingHandlerAdapter会将MappingJacksonHttpMessageConverter装配进来。而我们使用也只需要使用注解修饰就可以完成JSON格式的转换

    @ResponseBoy

    //@ResponseBody
        @RequestMapping("/getJson")
        public @ResponseBody String getJson() {
            return "success";
        }

    我们只需要将方法使用注解@ResponseBody修饰就可以完成JSON格式自动转换,这个注解可以修饰在方法上,也可以修饰在返回值上。我们可以返回任意对象,他会自动转换成JSON格式返回给客户端。

    ResponseEntity

    除了使用@ResponseBody我们还可以使用ResponseEntity对象作为返回值,这两种方式效果是一样的。

    @RequestMapping("/getJson2")
        public ResponseEntity<String> getJson2() {
            ResponseEntity<String> responseEntity = new ResponseEntity<>("<h1>ResponseEntity</h1>", HttpStatus.OK);
            return responseEntity;
        }

    @RequestBody

    该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

    <form action="testRequestBody2" method="POST">
            <input type="text" name="username"><br>
            <input type="password" name="userpass"><br>
            <input type="submit" value="登陆">
        </form>
    @RequestMapping("/testRequestBody")
        public String hello(@RequestBody String body) {
            System.out.println(body);
            return "hello";
        }

    他会将我们这个表单中的数据转换成字符串类型

    HttpEntity

    这个对象使用起来效果是与@RequestBody效果是一致的。

    @RequestMapping("/testHttpEntity")
        public String getJson2(HttpEntity<String> entity) {
            System.out.println(entity.getBody());
            return "hello";
        }

    文件下载功能

    使用ResponseEntity<byte[]>来实现文件下载。文件下载只需要将文件输出类型该为可以被下载的文件类型设置为ResponseEntity<byte[]>即可。 

    @RequestMapping("/downFile")
        public ResponseEntity<byte[]> testdownFile(HttpSession session) throws IOException {
            ServletContext servletContext = session.getServletContext();
            InputStream in = servletContext.getResourceAsStream("downloads/down.txt");
            byte[] bytes = FileCopyUtils.copyToByteArray(in);
            HttpHeaders header = new HttpHeaders();
            header.add("Content-Disposition", "attachment;filename=down.txt");
            ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(bytes, header, HttpStatus.OK);
            return entity;
        }

    filename这个属性是文件下载的文件名字。

  • 相关阅读:
    Pandas: 如何将一列中的文本拆分为多行? | Python
    Python项目实战:福布斯系列之数据采集
    Python: Pandas运算的效率探讨以及如何选择高效的运算方式
    Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
    从历史来看印度的裂痕和隐忧 | 阅览群书
    Python库:序列化和反序列化模块pickle介绍
    无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
    spring 问题笔记
    java 大量数据处理问题记录
    spring mvc 整合swagger
  • 原文地址:https://www.cnblogs.com/SimpleWu/p/9739436.html
Copyright © 2011-2022 走看看