消息转换器-HttpMessageConverter
概述
在springMVC中,可以使用@RequestBody和@ResponceBody这2个注解完成请求报文到数据对象,和数据对象到响应报文的转化, 便是使用了HttpMessageConverter这种灵活的消息转换机制。
java中的http请求
在servlet标准中,可以使用javax.servlet.request接口中的以下方法:
public ServletInputStream getInputStream() throws IOException;
ServletInputStream是一个可以读取到请求报文中内容的输入流。
public ServletOutputStream getOutputStream() throws IOException;
ServletOutputStream则是用来输出响应报文内容的输出流。
不论是请求报文还是响应报文,内容实际上都是字符串,而在业务逻辑处理中往往都需要用到对象,所以就存在一个字符串跟对象相互转换的一个问题。在springMVC中,便是用HttpMessageConverter机制来处理这个问题的。
HttpInputMessage和HttpOutputMessage
HttpInputMessage是对一次http请求报文的抽象,它是HttpMessageConverter的read()方法中的一个参数,抽象名为"请求信息",消息转化器就按照一定的规则从"请求信息"中提取出信息。
package org.springframework.http;
import java.io.IOException;
import java.io.InputStream;
public interface HttpInputMessage extends HttpMessage {
InputStream getBody() throws IOException;
}
HttpOutputMessage则是响应报文的抽象,它是HttpMessageConventer中write()方法的参数,消息转换器按照一定规则把响应消息写入到响应报文中。
package org.springframework.http;
import java.io.IOException;
import java.io.OutputStream;
public interface HttpOutputMessage extends HttpMessage {
OutputStream getBody() throws IOException;
}
HttpMessageConventer
对消息转换器最高层次的接口抽象,描述了消息转换器的一般特征。
package org.springframework.http.converter;
import java.io.IOException;
import java.util.List;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
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;
void write(T t, MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException;
}
消息转换流程
网友评论