JSON是一中基于JavaScript语法开放的轻量级数据交换格式,使用js语法来描述数据对象
二、JSON对象
2.1简单对象
//普通JSON对象
@RequestMapping("/jsonNomal")
@ResponseBody//可以绕过视图解析器
public User jsonNomal() {
User user = new User("QQ", 19);
return user;
}
2.2 复杂JSON对象
假设有如下对象new User(“小皮鞭”, 19, new Stu(“黄天霸”, 10)),转为json对象格式如下
{
"name":"小皮鞭",
"age":19,
"stu":{
"name":"黄天霸",
"age":10
}
}
2.3集合或数组返回JSON对象
//返回集合或数组对象
@RequestMapping("/jsonList")
@ResponseBody//可以绕过视图解析器
public List<User> jsonList() {
List<User> list = Arrays.asList(new User("qq",18),new User("微信",15));
return list;
}
2.4既有普通对象也有数组
//map集合
@RequestMapping("/jsonMap")
@ResponseBody//可以绕过视图解析器
public Object jsonMap() {
List<User> list = Arrays.asList(new User("qq",18),new User("微信",15));
HashMap<String, Object> map = new HashMap<>();
map.put("name", "乳扇");
map.put("list", list);
return map;
}
三、JSON中对日期格式的特殊处理
在日期对象前加上注解
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
从前台向后台上:
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
配置文件:
<!-- 配置文件上传解析器(按需配置)
id属性必须为:multipartResolver
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--
maxUploadSize:配置文件上传的最大大小限制
value:最大的文件大小,单位是byte
-->
<!-- <property name="maxUploadSize" value="1,048,576"></property> -->
<!--
使用spring的el表达式。#{1024 * 1024}
-->
<property name="maxUploadSize">
<value>#{1024 * 1024 * 10}</value>
</property>
</bean>
四、文件上传
步骤
1、前段要求:
(1)form表单提交方式必须是post提交
(2)enctype属性必须"multipart/form-data"
(3)input的属性是file且必须要有name
2、后端步骤
(1)获取上传文件输入流
(2)将文件输入流转为缓冲流
(3)获取文件输出流
使用UUID获取随机字符串与源文件的名字拼接,作为新的文件名
使用req.getServletContext().getRealPath(“/upload”)获取当前项目所在的路径
创建file文件对象
没有就创建
有就直接下一步
获取缓冲输出流
(4)使用IOUtils工具类的copy对象
(5)关流
@RequestMapping("/upload")
@ResponseBody
public void uploadFile(MultipartFile file,HttpServletRequest req) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//获取上传问价输入流
InputStream is = file.getInputStream();
//将文件输入流转换为缓冲流
bis = new BufferedInputStream(is);
//使用UUID获取随机字符串与源文件做拼接,作为新文件名
String str = UUID.randomUUID().toString().replaceAll("-", "");
String newFileName = str + file.getOriginalFilename();
//使用req.getServletContext().getRealPath("/upload")获取当前项目所在的路径
String realPath = req.getServletContext().getRealPath("/upload");
//创建文件对象
File f = new File(realPath, newFileName);
if(!f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}
//获取缓冲输出流
FileOutputStream os = new FileOutputStream(f);
bos = new BufferedOutputStream(os);
//使用IOUtils工具类的copy方法,拷贝文件
IOUtils.copy(bis, bos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(bos!=null) {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(bis!=null) {
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
五、文件下载
前端:使用a连接,传入name属性,值为后端需要下载文件名称
后端:1、找到用户需要下载文件,判断文件存在再下载,文件不存在暂时不处理
2、通过这个文件对象new一个字节缓冲输入流
3、告诉浏览器你现在做的是下载操作,注意如果文件名是中文,需要使用URLEncoder编码
resp.setHeader(“Content-Disposition”, “attachment; filename=”
+ URLEncoder.encode(name, “UTF-8”));
4、通过response对象获取字节输出流并转为缓冲流
5、使用IOUtils工具类的copy方法,拷贝文件
6、关流
@RequestMapping("/download")
@ResponseBody
public void download(String name, HttpServletRequest req, HttpServletResponse resp){
String str = req.getServletContext().getRealPath("/downloadfile");
File file = new File(str, name);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
if(file.exists()) {
try {
FileInputStream fs = new FileInputStream(file);
bis = new BufferedInputStream(fs);
resp.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(name, "UTF-8"));
ServletOutputStream os = resp.getOutputStream();
bos = new BufferedOutputStream(os);
IOUtils.copy(bis, bos);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(bos!=null) {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(bis!=null) {
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
}