美文网首页
SpringMVC: 消息转换器-HttpMessageConv

SpringMVC: 消息转换器-HttpMessageConv

作者: zsj0310 | 来源:发表于2017-03-20 21:59 被阅读0次

    消息转换器-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;
    
    }
    
    消息转换流程

    相关文章

      网友评论

          本文标题:SpringMVC: 消息转换器-HttpMessageConv

          本文链接:https://www.haomeiwen.com/subject/ckginttx.html