1.3. 数据格式和 REST API


Data Grid 缓存以可通过 MediaType 定义的格式存储数据。

有关使用 Data Grid 的 MediaTypes 和编码数据的更多信息,请参阅 Cache Encoding 和 Marshalling

以下示例为条目配置存储格式:

<distributed-cache name="mycache">
   <encoding>
      <key media-type="application/x-java-object"/>
      <value media-type="application/xml; charset=UTF-8"/>
   </encoding>
</distributed-cache>
Copy to Clipboard Toggle word wrap

如果没有配置 MediaType,Data Grid 默认为 application/octet-stream 用于键和值。但是,如果缓存被索引,则数据网格默认为 application/x-protostream

1.3.1. 支持的格式

您可以以不同格式写入和读取数据,Data Grid 可以根据需要在这些格式之间进行转换。

以下"标准"格式是可交换的:

  • application/x-java-object
  • application/octet-stream
  • application/x-www-form-urlencoded
  • text/plain

您还可以将前面的数据格式转换为以下格式:

  • application/xml
  • application/json
  • application/x-jboss-marshalling
  • application/x-protostream
  • application/x-java-serialized

通过数据网格,您可以在 application/x-protostreamapplication/json 之间转换。

对 REST API 的所有调用都可以提供标头,描述在读取时写入的内容或所需格式。Data Grid 支持为值应用的标准 HTTP/1.1 标头 "Content-Type" 和 "Accept",以及 "Key-Content-Type",对键类似。

1.3.2. 接受标头

Data Grid REST 端点与 RFC-2616 Accept 标头兼容,并根据支持的转换协商正确的 MediaType。

例如,在读取数据时发送以下标头:

Accept: text/plain;q=0.7, application/json;q=0.8, */*;q=0.6
Copy to Clipboard Toggle word wrap

前面的标头会导致 Data Grid 首先返回 JSON 格式的内容(高优先级 0.8)。如果无法将存储格式转换为 JSON,Data Grid 将尝试下一个 text/plain 格式(具有最高优先级 0.7)。最后,Data Grid 会返回 * attention,它根据缓存配置选择合适的格式。

1.3.3. 带有特殊 Characters 的名称

创建任何 REST 资源需要一个属于 URL 的名称,如果此名称包含 RFC 3986 spec 第 2.2 节 中定义的任何特殊字符,则需要使用 Percent 编码机制对其进行编码

1.3.4. key-Content-Type Headers

大多数 REST API 调用在 URL 中包含密钥。Data Grid 假设 Key 在处理这些调用时是 java.lang.String,但您可以对采用不同格式的密钥使用特定的标头 Key-Content-Type

key-Content-Type 标头示例

  • 将 byte[] Key 指定为 Base64 字符串:

API 调用:

`PUT /my-cache/AQIDBDM=`
Copy to Clipboard Toggle word wrap

headers:

key-Content-Type: application/octet-stream

  • 以十六进制字符串形式指定 byte[] 密钥:

API 调用:

GET /my-cache/0x01CA03042F

headers:

Key-Content-Type: application/octet-stream; encoding=hex
Copy to Clipboard Toggle word wrap
  • 指定双键:

API 调用:

POST /my-cache/3.141456

headers:

Key-Content-Type: application/x-java-object;type=java.lang.Double
Copy to Clipboard Toggle word wrap

application/x-java-objecttype 参数仅限于:

  • 原语打包程序类型
  • java.lang.String
  • 字节,使 application/x-java-object;type=Bytes 等同于 application/octet-stream;encoding=hex

1.3.5. JSON/Protostream Conversion

当缓存被索引或专门配置为存储 _application/x-protostream' 时,您可以发送和接收自动转换为 Protobuf 的 JSON 文档。

您必须注册 Protobuf 模式才能使转换正常工作。

要通过 REST 注册 protobuf 模式,请在 ___protobuf_metadata 缓存中调用 POST 或 PUT,如下例所示:

curl -u user:password -X POST --data-binary @./schema.proto http://127.0.0.1:11222/rest/v2/caches/___protobuf_metadata/schema.proto
Copy to Clipboard Toggle word wrap

编写 JSON 文档时,文档中有一个特殊字段 _type,以标识与文档对应的 Protobuf 消息

Person.proto

message Person  {
  required string name = 1;
  required int32 age = 2;
}
Copy to Clipboard Toggle word wrap

Person.json

{
   "_type": "Person",
   "name": "user1",
   "age": 32
}
Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部