1.3. 数据格式和 REST API


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

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

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

<distributed-cache>
   <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 用于键和值。但是,如果缓存被索引,Data Grid 默认为 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

Data Grid 还可让您在 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 会尝试下一个 文本/纯文本 格式(第二个最高优先级 0.7)。最后,Data Grid 回退到"为",它根据缓存配置选择合适的格式。

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[] Key 指定为十六进制字符串:

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
  • bytes,使 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 缓存中调用 POSTPUT,如下例所示:

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