使用HttpMessageConverter<T>将请求信息转换并绑定到处理方法的入参中
或将响应结果转换为对应类型的响应信息,Spring提供两种途径:
-使用@RequestBody/@ResponseBody对处理方法进行标注
-使用HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值
当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>
spring首先会根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter
进而根据参数类型或泛型类型过滤得到匹配的HttpMessageConverter
若找不到可用的HttpMessageConverter将报错
另:@RequestBody/@ResponseBody可用单独使用
别忘了添加jackson的jar包文件
package com.hous.crud.controller;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class JsonController {
@RequestMapping("/json")
public String json() {
return "json";
}
@ResponseBody
@RequestMapping("/testJson")
public Map<String, String> testJson() {
Map<String, String> map = new HashMap<>();
map.put("id", UUID.randomUUID().toString());
map.put("lastName", "shanshanbox.com");
return map;
}
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body) {
System.out.println(body);
return "shanshanbox.com " + new Date();
}
@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<>(body, headers, statusCode);
return response;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test json</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/scripts/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#json').click(function(){
var url = this.href;
var args = {};
$.post(url, args, function(data){
if(data) {
var id = data.id;
var lastName = data.lastName;
alert(id + ' => ' + lastName);
}
});
return false;
});
});
</script>
</head>
<body>
<a href="testJson" id="json">get json</a>
<br/><br/>
<a href="testResponseEntity" id="json">get ResponseEntity</a>
<br/><br/>
<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>
<br/><br/>
</body>
</html>