1.jar包依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
2.使用实例:在方法上加@ResponseBody 注解。
@Controller
@RequestMapping("/user")
public class UserController
{
@Autowired
private UserService userService;
@RequestMapping("/getUserList")
@ResponseBody
public Map<String, Object> getUserList(Model model)
{
List<User> userlist = userService.getUserList();
Map<String, Object> map = new HashMap<>();
map.put("aaData", userlist);
return map;
}
}
3.HttpMessageConverter数据转化
接口:HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
public interface HttpMessageConverter<T> {
//判断数据类型是否可读
boolean canRead(Class<?> clazz, MediaType mediaType);
//判断数据是否可写入响应流中
boolean canWrite(Class<?> clazz, MediaType mediaType);
//获取支持的数据类型
List<MediaType> getSupportedMediaTypes();
//对参数值进行读,转换为需要的类型
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
//将返回值(T类型的对象)写入响应流中,同时指定相应的媒体类型为contentType
void write(T t, MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException;
}
在读写操作方面springMVC又提供了读操作接口HttpInputMessage和写操作接口HttpOutputMessage来完成数据的读写操作。
HttpInputMessage提供的接口就是将body中的数据转为输入流
HttpOutputMessage提供的接口就是将body中的数据转为输出流
HttpMessageConverter接口及实现类图
在SpringMVC进入readString方法前,会根据@RequestBody注解选择适当的HttpMessageConverter实现类来将请求参数解析到String变量中,具体来说是使用了StringHttpMessageConverter类,它的canRead()方法返回true,然后它的read()方法会从请求中读出请求参数,绑定到readString()方法的string变量中。
当SpringMVC执行readString方法后,由于返回值标识了@ResponseBody,SpringMVC将使用StringHttpMessageConverter的write()方法,将结果作为String值写入响应报文,当然,此时canWrite()方法返回true。
原理如图: