SpringMVC学习总结(四).SpringMVC处理Json与文件的上传下载

原创 2017年01月02日 21:51:33

SpringMVC处理Json


①.引入依赖
<!-- json -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.8.5</version>
</dependency>

②.编写处理类
@ResponseBody
    @RequestMapping("/testjson")
    public List<User> testJson() {
        List<User> userList = new ArrayList<User>();
        userList.add(new User(1, "admin", 22, "admin@163.com"));
        userList.add(new User(2, "admin", 22, "admin@163.com"));
        userList.add(new User(3, "admin", 22, "admin@163.com"));
        userList.add(new User(4, "admin", 22, "admin@163.com"));
        
        return userList;
    }

③.测试


HttpMessageConverter<T>

HttpMessageConverter<T>是spring3.0新增的一个接口,负责将请求信息转换为一个对象(类型为T),将对象(类型T)输出为响应信息





实现类:



使用HttpMessageConverter<T>


  • 使用HttpMessageConverter<T>将请求信息转换并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,spring提供了两种途径:
          --使用@requestBody / @responseBody对处理方法进行标注
          --使用HttpEntity<T> / ResponseEntity<T> 作为处理方法的入参或者返回值

  • 当控制器处理方法用到@requestBody / @responseBody 或HttpEntity<T> / ResponseEntity<T> 时,spring首先根据请求头或响应头的Accept 属性选择匹配的HttpMessageConterver  , 进而根据参数类型或泛型类型过滤得到匹配的HttpMessageConterver ,若找不到可用的HttpMessageConterver 将报错
  • @requestBody / @responseBody不需要成对出现

@requestBody / @responseBody 示例

@requestBody      json-->对象
@responseBody  对象-->json

<!--测试 @requestBody / @responseBody  -->
	<form action="/testHttpMessageConverter" method="POST" enctype="multipart/form-data">
		File: <input type="file" name="file"/>
		Desc: <input type="text" name="desc"/>
		<input type="submit" value="Submit"/>
	</form>
/**
 * 
 * @Title: testHttpMessageConverter   
 * @Description: 
 * @RequestBody: 将请求类型转为字符串
 * @ResponseBody 将响应类型转为字符串
 * @param: @param body
 * @param: @return      
 * @return: String      
 * @throws
 */
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){
        System.out.println(body);
        return "helloworld! " + new Date();
}

上传桌面上的aaa.txt



HttpEntity<T> / ResponseEntity<T> 示例

如下的文件下载.


文件上传


 spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver(接口)实现的。Spring Jakarta Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResovlerSpring 

    • Spring MVC 上下文中默认没有装配MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用Spring 的文件上传功能,需现在上下文中配置MultipartResolver

①.引入依赖
<!-- 文件上传 -->
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.1-jenkins-1</version>
</dependency>


②.配置CommonsMultipartResolver
 


<!-- 配置 MultipartResolver  来上传文件 -->
<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="defaultEncoding" value="UTF-8"></property>
	<property name="maxUploadSize" value="1024000"></property>	
</bean>	



③.编写控制类
@RequestMapping("/testFileUpload")
    public String testFileUpload(@RequestParam("desc") String desc, @RequestParam("file") MultipartFile file)
            throws IOException {
        System.out.println("desc: " + desc);
        System.out.println("OriginalFilename: " + file.getOriginalFilename()); //原始文件名
        System.out.println("InputStream: " + file.getInputStream());   //输入流

        // 方式一:通过流的方式上传文件
        OutputStream os = new FileOutputStream("E:/" + new Date().getTime() + file.getOriginalFilename());
        InputStream is = file.getInputStream();
        int temp;
        // 一个一个字节的读取并写入
        while ((temp = is.read()) != (-1)) {
            os.write(temp);
        }
        os.flush();
        os.close();
        is.close();

        //方式二:采用file.Transto 来保存上传的文件
        /*System.out.println("fileName:" + file.getOriginalFilename());
        String path = "E:/" + new Date().getTime() + file.getOriginalFilename();

        File newFile = new File(path); // 通过CommonsMultipartFile的方法直接写文件(注意这个时候)
        file.transferTo(newFile);*/
        
        
        //可以保存到webapp目录下的upload文件夹
        /*String path = request.getSession().getServletContext().getRealPath("upload");  
        String fileName = file.getOriginalFilename();  
        System.out.println(path);  
        File targetFile = new File(path, fileName);  
        if(!targetFile.exists()){  
          targetFile.mkdirs();  
        }  
        file.transferTo(targetFile);*/  

        return "success";
    }



④.编写jsp
<!--文件上传  -->
	<form action="/testFileUpload" method="POST" enctype="multipart/form-data">
		File: <input type="file" name="file"/>
		Desc: <input type="text" name="desc"/>
		<input type="submit" value="Submit"/>
	</form>


文件下载

下载webapp下file/abc.txt

①.编写jsp
<a href="testResponseEntity">Test ResponseEntity</a>
②.编写控制层
/**
 * 
 * @Title: testResponseEntity   
 * @Description: 文件下载
 * @param: @param session
 * @param: @return
 * @param: @throws IOException      
 * @return: ResponseEntity<byte[]>      
 * @throws
 */
@RequestMapping("/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
    byte[] body = null;
    ServletContext servletContext = session.getServletContext();
    InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
    body = new byte[in.available()];
    in.read(body);

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attachment;filename=abc.txt");

    HttpStatus statusCode = HttpStatus.OK;

    ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
    return response;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

web文件上传(一)--文件上传与json上传区别及方法

Web文件上传方法总结大全 上传文件与与上传数据区别 上传数据主要指json等简单字符串,上传文件指的是上传word、excel图片等。在上传数据的时候enctype默认为第一个applicat...

json传输二进制的方案

本文转自:http://wiyi.org/binary-to-string.html json 是一种很简洁的协议,但可惜的是,它只能传递基本的数型(int,long,string等),但不能传递b...
  • xingty
  • xingty
  • 2015年03月11日 17:06
  • 31976

springmvc 处理json,上传文件,下载文件

pom.xml

ajaxfileupload文件上传带参数,json序列化到后台!

前几天使用了ajaxfileupload方法传文件带上json数据,到controller这么都是接受到"{"这个符号. 仅需对ajaxfileupload文件进行源码的更改即可,附上代码,可直接创...

如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?

修复返回的json数据IE提示下载问题
  • nmgrd
  • nmgrd
  • 2017年09月06日 14:56
  • 300

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析

一、概述。        SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到。 二、代码演示。 需...
  • gwblue
  • gwblue
  • 2015年01月25日 19:54
  • 15854

SpringMVC中文件上传和json数据配置

简单设置

web文件上传(一)--文件上传与json上传区别及方法

Web文件上传方法总结大全 上传文件与与上传数据区别 上传数据主要指json等简单字符串,上传文件指的是上传word、excel图片等。在上传数据的时候enctype默认为第一个applicat...

使用JSON进行数据传输的总结

一、选择的意义在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。为了更好的使用ajax,我们将学习一种有用的数据格式 JavaScript Object Notation(J...
  • woshisap
  • woshisap
  • 2011年06月16日 18:04
  • 18378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringMVC学习总结(四).SpringMVC处理Json与文件的上传下载
举报原因:
原因补充:

(最多只允许输入30个字)