- 处理 JSON
1.加入 jar 包
2.编写目标方法,使其返回 JSON 对应的对象或集合
3.在方法上添加 @ResponseBody 注解
<a href="testJson" id="testJson">Test Json</a>
@Autowired
private EmployeeDao employeeDao;
@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson(){
return employeeDao.getAll();
}
-
HttpMessageConverter
HttpMessageConverter 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
• HttpMessageConverter接口定义的方法:
– Boolean canRead(Class clazz,MediaType mediaType): 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json等) – Boolean canWrite(Class clazz,MediaType mediaType):指定转换器是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型在 MediaType 中定义。
– LIst getSupportMediaTypes():该转换器支持的媒体类型。
– T read(Class<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为 T 类型的对象。
– void write(T t,MediaType contnetType,HttpOutputMessgaeoutputMessage):将 T 类型的对象写到响应流中,同时指定相应的媒体类型为 contentType。
大致流程:
-
使用 HttpMessageConverter
• 使用 HttpMessageConverter 将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
– 使用@RequestBody / @ResponseBody
对处理方法进行标注
– 使用HttpEntity<T> / ResponseEntity<T>
作为处理方法的入参或返回值
• 当控制器处理方法使用到 @RequestBody/@ResponseBody 或 HttpEntity/ResponseEntity 时, Spring首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter
, 若找不到可用的 HttpMessageConverter 将报错
• @RequestBody 和 @ResponseBody 不需要成对出现
eg:上传文件来查看信息内容并返回信息(并非真正上传文件)
<!-- JSP页面文件上传代码 -->
<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"/>
<!-- SpringMVCTest页面文件上传代码 -->
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){
System.out.println(body);
return "helloworld!"+ new Date();
}
eg:目录 file 下文件的下载
@RequestMapping("/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
byte [] body = null;
ServletContext servletContext = session.getServletContext();
InputStream in = servletContext.getResourceAsStream("/WEB-INF/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;
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于