使用HttpMessageConverter<T>将请求信息转换并绑定到处理方法的入参中
或将响应结果转换为对应类型的响应信息,Spring提供两种途径:
-使用@RequestBody/@ResponseBody对处理方法进行标注
-使用HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值
当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>
spring首先会根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter
进而根据参数类型或泛型类型过滤得到匹配的HttpMessageConverter
若找不到可用的HttpMessageConverter将报错
另:@RequestBody/@ResponseBody可用单独使用
扫描二维码关注公众号,回复:
643601 查看本文章
别忘了添加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>