HttpMessageConverter 接口作用:
1)实现请求的数据转为java对象;
2) 把控制器方法返回的对象转为json,xml,text,二进制等不同格式的数据。
public interface HttpMessageConverter<T> {
/**
作用: 检查clazz这个类型的对象,能否转为 mediaType表示的数据格式
如果能转为mediaType表示的类型, 返回true, 返回true调用read()
*/
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
/**
作用: 接收请求中的数据,把数据转为 clazz表示的对象
*/
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
/**
作用:检查clazz这种数据类型,能否转为mediaType表示的数据格式
*/
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
/**
作用: 把t对象,按照contentType说明的格式,把对象转为json或者xml
*/
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException;
}
MediaType:媒体类型,表示互联网中数据的格式。例如application/json, text/html, image/gif
HttpMessageConverter 接口的实现类:
MappingJackson2HttpMessageConverter : 用jackson工具库的ObjectMapper把java对象转为json数据格式
StringHttpMessageConverter : 把字符串类型的数据,进行格式转换和编码
怎么使用实现类:
框架根据控制器方法的返回类型, 自动查找使用的实现类。
@RequestMapping("/receive-object.do")
public Student doReceiveObject(String name,Integer age){
System.out.println("MyController的方法doReceiveObject=");
Student student = new Student();
student.setName("lisi");
student.setAge(20);
return student;
}
默认情况下: springmvc使用了HttpMessageConveter接口的4个实现类。包括了StringHttpMessageConverter.
需要在springmvc的配置文件,加入注解驱动的标签 mvc:annotation-driven. 加入这个标签后, springmvc项目启动后,会创建HttpMessageConveter接口的7个实现类对象,包括StringHttpMessageConverter 和 MappingJackson2HttpMessageConverter。
2、@ResponseBody
@ResponseBody注解的作用,就是把student转换后的json通过HttpServletResponse对象输出给浏览器。
//输出json,响应ajax
response.setContentType("application/json;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.println(json);
pw.flush();
pw.close();
@ResponseBody注解作用就上面的代码的实现
2.1 控制器方法返回对象转为json的步骤
1)pom.xml加入jackson依赖,springmvc框架,默认处理json就是使用jackson
2)在springmvc的配置文件中,加入注解驱动的标签mvc:annotation-dirven
- 在控制器方法的上面加入@ResponseBody注解,表示返回值数据,输出到浏览器。