SpringMVC 4.3ソースコード分析のHttpMessageConverter

2988 ワード

1.HttpMessageConverterの概要
HttpMessageConverterとは、HttpServiceletRequestのデータを、MediaTypeに従って指定されたフォーマットのデータに変換することです.たとえば、一般的なフォームのコミットやJson文字列のコミットなど、主な実装インタフェースは次のとおりです.
//       ->        requests   response     
public interface HttpMessageConverter {

    //     class       (MediaType       )
    boolean canRead(Class> clazz, MediaType mediaType);

    //    class   MediaType ->   HttpMessageConverter             
    boolean canWrite(Class> clazz, MediaType mediaType);

    //    HttpMessageConverter     MediaType
    List getSupportedMediaTypes();

    //   HttpInputMessage       ,      T     
    T read(Class extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;

    //   T            HttpOutputMessage      
    void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}

インタフェースの実装クラスには、主に次のようなクラスがあります.
1. FormHttpMessageConverter
       MultiValueMap   ,    MediaType     "multipart/form-data",   InputStream       ,    &    ,       MultiValueMap,     MultiValueMap    &         ,         ,      
2. BufferedImageHttpMessageConverter
       BufferedImgae   HttpMessageConverter,    ImageReader   HttpBody          BufferedImage,  ImageWriter  ImageReader           OutputMessage
3. StringHttpMessageConverter
          String    ,   InputMessage          str,                  OutputMessage
4. SourceHttpMessageConverter
       DOMSource, SAXSource, StAXSource, StreamSource, Source         ,       ,   HttpBody                  ,       TransformerFactory          
5. ResourceHttpMessageConverter
            Resource    ,   HttpBody           InputStreamResource|ByteArrayResource,    Resource       ,      
6. ProtobufHttpMessageConverter
            com.google.protobuf.Message,    com.google.protobuf.Message.Builder   HttpBody               Message,    ProtobufFormatter   com.google.protobuf.Message            
7. ObjectToStringHttpMessageConverter
       MediaType  text/plain   ,   InputMessage           ,    ConversionService              Object;    Obj     String,      String       
8. ByteArrayHttpMessageConverter
          byte   ,   InputMessage            ,    OutputMessage       
9. AbstractXmlHttpMessageConverter    
        xml   Object           HttpMessageConverter
10. AbstractGenericHttpMessageConverter
        Json   Object           HttpMessageConverter (PS:      JackSon   Gson)
11. GsonHttpMessageConverter
       application/*++json      ,     Gson,             
12. MappingJackson2XmlHttpMessageConverter
      application/*++json/*+xml      ,     JackSon,             

2.HttpMessageConverterまとめ
HttpMessageConverterはSpringMVC全体において、MediaTypeタイプに応じてHttpServertRequestのデータを指定オブジェクトに変換する変換器、またはオブジェクトを指定フォーマットのデータに変換する(PS:byte/string/xml/jsonなど);その全体的なデザインはHandlerMethodArgumentResolverに似ています!