跳到主要内容

Spring MVC系列(10)-使用fastjson自定义消息转换器

前置知识

Content-Type

Content-Type(内容类型),常作用于HTTP消息头,表示内容编码类型。可以根据编码类型使用特定的解析方式,获取数据流中的数据。

 

Media Type

Media Type,即媒体类型,也叫做于MIME类型,有时在一些协议的消息头中叫做“Content-Type”。它使用两部分标识符来确定一个类型。在HTTP中,消息头Content-Type对应的值就可以叫做是Media Type。

Media Type对象包含了三种信息:type 、subtype、charset,比如下面表示这个数据流的媒体类型为:

  • type值是text,表示是文本这一大类;
  • / 后面的x-markdown是subtype,表示是文本这一大类下的markdown这一小类;
  • charset=utf-8 则表示采用UTF-8编码
text/x-markdown; charset=utf-8

在Spring中,提供了MediaType类来表示媒体类型,提供了MediaType 类型的各种常量、字符串常量,表示各种媒体类型。

  private static final long serialVersionUID = 2069937152339670231L;
// */* 支持所有的媒体类型
public static final MediaType ALL = new MediaType("*", "*");
public static final String ALL_VALUE = "*/*";
// Application:用于传输应用程序数据或者二进制数据;
// application/atom+xml Atom XML聚合格式
public static final MediaType APPLICATION_ATOM_XML = new MediaType("application", "atom+xml");
public static final String APPLICATION_ATOM_XML_VALUE = "application/atom+xml";
// application/cbor cbor类型二进制形式JSON格式
public static final MediaType APPLICATION_CBOR = new MediaType("application", "cbor");
public static final String APPLICATION_CBOR_VALUE = "application/cbor";
// application/x-www-form-urlencoded 即表单默认的数据提交格式,提交的数据以key=val形式编码,用&连接,如
public static final MediaType APPLICATION_FORM_URLENCODED = new MediaType("application", "x-www-form-urlencoded");
public static final String APPLICATION_FORM_URLENCODED_VALUE = "application/x-www-form-urlencoded";
// application/json JSON数据格式
public static final MediaType APPLICATION_JSON = new MediaType("application", "json");
public static final String APPLICATION_JSON_VALUE = "application/json";
// application/json;charset=UTF-8 指定为JSON格式,以UTF-8字符编码进行编码
/** @deprecated */
@Deprecated
public static final MediaType APPLICATION_JSON_UTF8;
/** @deprecated */
@Deprecated
public static final String APPLICATION_JSON_UTF8_VALUE = "application/json;charset=UTF-8";
// application/octet-stream 二进制流数据(如常见的文件下载)
public static final MediaType APPLICATION_OCTET_STREAM;
public static final String APPLICATION_OCTET_STREAM_VALUE = "application/octet-stream";
// application/pdf pdf格式
public static final MediaType APPLICATION_PDF;
public static final String APPLICATION_PDF_VALUE = "application/pdf";
// application/problem+json 错误信息Json格式
public static final MediaType APPLICATION_PROBLEM_JSON;
public static final String APPLICATION_PROBLEM_JSON_VALUE = "application/problem+json";
// application/problem+json;charset=UTF-8 错误信息Json格式,以UTF-8字符编码进行编码
/** @deprecated */
@Deprecated
public static final MediaType APPLICATION_PROBLEM_JSON_UTF8;
/** @deprecated */
@Deprecated
public static final String APPLICATION_PROBLEM_JSON_UTF8_VALUE = "application/problem+json;charset=UTF-8";
// application/problem+xml 错误信息XML格式
public static final MediaType APPLICATION_PROBLEM_XML;
public static final String APPLICATION_PROBLEM_XML_VALUE = "application/problem+xml";
// application/rss+xml RSS格式的XML文件
public static final MediaType APPLICATION_RSS_XML;
public static final String APPLICATION_RSS_XML_VALUE = "application/rss+xml";
// application/x-ndjson ndJSON的Json标准
public static final MediaType APPLICATION_NDJSON;
public static final String APPLICATION_NDJSON_VALUE = "application/x-ndjson";
/** @deprecated */
// application/stream+json JSON数据流
@Deprecated
public static final MediaType APPLICATION_STREAM_JSON;
/** @deprecated */
@Deprecated
public static final String APPLICATION_STREAM_JSON_VALUE = "application/stream+json";
// application/xhtml+xml XHTML系列文档的类型
public static final MediaType APPLICATION_XHTML_XML;
public static final String APPLICATION_XHTML_XML_VALUE = "application/xhtml+xml";
// application/xml XML数据格式
public static final MediaType APPLICATION_XML;
public static final String APPLICATION_XML_VALUE = "application/xml";

// 图片相关
// image/gif gif图片格式
public static final MediaType IMAGE_GIF;
public static final String IMAGE_GIF_VALUE = "image/gif";
// image/jpeg jpg图片格式
public static final MediaType IMAGE_JPEG;
public static final String IMAGE_JPEG_VALUE = "image/jpeg";
// image/png png图片格式
public static final MediaType IMAGE_PNG;
public static final String IMAGE_PNG_VALUE = "image/png";

// Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据
// multipart/form-data 会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件
public static final MediaType MULTIPART_FORM_DATA;
public static final String MULTIPART_FORM_DATA_VALUE = "multipart/form-data";
// multipart/mixed 变成 Stream 流的方式
public static final MediaType MULTIPART_MIXED;
public static final String MULTIPART_MIXED_VALUE = "multipart/mixed";
// multipart/related 多种格式
public static final MediaType MULTIPART_RELATED;
public static final String MULTIPART_RELATED_VALUE = "multipart/related";

// Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式
// text/event-stream 事件流
public static final MediaType TEXT_EVENT_STREAM;
public static final String TEXT_EVENT_STREAM_VALUE = "text/event-stream";
// text/html html格式文本
public static final MediaType TEXT_HTML;
public static final String TEXT_HTML_VALUE = "text/html";
// ext/markdown markdown格式文本
public static final MediaType TEXT_MARKDOWN;
public static final String TEXT_MARKDOWN_VALUE = "text/markdown";
// text/plain 纯文本格式
public static final MediaType TEXT_PLAIN;
public static final String TEXT_PLAIN_VALUE = "text/plain";
// text/xml XML格式文本
public static final MediaType TEXT_XML;
public static final String TEXT_XML_VALUE = "text/xml";