Akka HTTP 如何创建 application/schema+json 等自定义 ContentType
实现方案
第一步:补全MediaTypes层的媒体类型定义
Akka HTTP 中awfc是ApplicationWithFixedCharset的简写工具方法,用于创建绑定固定默认字符集的application类媒体类型。参照已内置的application/json、application/json-patch+json定义格式,先在MediaTypes对象中追加对应两个媒体类型的定义:
// 追加到 MediaType.scala 中的代码 val `application/schema+json` = awfc("schema+json", HttpCharsets.`UTF-8`) val `application/schema-instance+json` = awfc("schema-instance+json", HttpCharsets.`UTF-8`)
实现逻辑对齐内置规范的点:
- 两类媒体类型都属于application资源范畴,和已有的JSON衍生媒体类型一样采用
awfc方法创建,而非可变字符集的媒体类型定义- 默认绑定UTF-8作为字符集,符合JSON Schema相关规范对JSON类资源的编码要求
第二步:创建对应ContentType实例
参照内置application/json的ContentType实现逻辑,直接将对应已定义的MediaType包裹为ContentType,追加到ContentTypes对象中即可:
// 追加到 ContentType.scala 中的代码 val `application/schema+json` = ContentType(MediaTypes.`application/schema+json`) val `application/schema-instance+json` = ContentType(MediaTypes.`application/schema-instance+json`)
完成上述定义后,这两个ContentType就可以和内置的application/json一样,直接在Akka HTTP的路由匹配、请求/响应实体声明、序列化解析逻辑中调用。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

