处理JSON的步骤
- 加入jar包
- 编写目标方法,使其返回JSON对应的对象或集合
package com.cerr.springmvc.test;
import com.cerr.springmvc.crud.dao.EmployeeDao;
import com.cerr.springmvc.crud.entities.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Collection;
import java.util.List;
@Controller
public class SpringMVCTest1 {
@Autowired
private EmployeeDao employeeDao;
@RequestMapping(value = "/testJson")
public Collection <Employee> testJson(){
return employeeDao.getAll();
}
}
- 在方法上添加
@ResponseBody注解
添加后的代码如下:
package com.cerr.springmvc.test;
import com.cerr.springmvc.crud.dao.EmployeeDao;
import com.cerr.springmvc.crud.entities.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Collection;
import java.util.List;
@Controller
public class SpringMVCTest1 {
@Autowired
private EmployeeDao employeeDao;
@ResponseBody
@RequestMapping(value = "/testJson")
public Collection <Employee> testJson(){
return employeeDao.getAll();
}
}
在浏览器访问该请求后,按F12后可以查看到返回的JSON数据:
请求与SpringMVC之间的访问流程
HttpMessageConverter<T>
HttpMessageConverter<T>是Spring3.0新添加的一个接口,负责将请求信息转换为一个对象(类型为T),将对象(类型为T)输出为响应信息。
使用HttpMessageConverter<T>将请求信息转换并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring提供了两种途径:
- 使用
@RequestBody/@ResponseBody对处理方法进行标注 - 使用
HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值
当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>时,Spring首先根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter将报错。
注意:@RequestBody和@ResponseBody不需要成对出现。
示例:编写一个上传文件的例子
表单信息如下:
<%--
Created by IntelliJ IDEA.
User: 白菜
Date: 2019/11/16
Time: 23:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<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>
</body>
</html>
处理方法如下:
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){
System.out.println(body);
return "helloworld" + new Date();
}
会将文件和描述一起在控制台输出,并且在web端输出helloworld












网友评论