1.3. 数据格式和 REST API


Data Grid 缓存以格式存储数据,您可以使用 MediaType 定义。

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

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

<distributed-cache>
   <encoding>
      <key media-type="application/x-java-object"/>
      <value media-type="application/xml; charset=UTF-8"/>
   </encoding>
</distributed-cache>

如果您没有配置 MediaType,则 Data Grid 默认为 application/octet-stream 用于键和值。但是,如果对缓存进行索引,Data Grid 默认为 application/x-protostream

1.3.1. 支持的格式

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

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

  • 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. 接受 Headers

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

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

Accept: text/plain;q=0.7, application/json;q=0.8, */*;q=0.6

前面的标头会使 Data Grid 首先返回 JSON 格式(高优先级 0.8)的内容。如果无法将存储格式转换为 JSON,Data Grid 会尝试下一个 文本/纯文本格式(以秒 为 0.7))。最后,Data Grid 会退回到是是的,它根据缓存配置选择合适的格式。

1.3.3. 使用特殊字符的名称

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

1.3.4. key-Content-Type Headers

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

key-Content-Type Header 示例

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

API 调用:

`PUT /my-cache/AQIDBDM=`

headers:

key-Content-Type: application/octet-stream

  • 将 byte[] 键指定为十六进制字符串:

API 调用:

GET /my-cache/0x01CA03042F

headers:

Key-Content-Type: application/octet-stream; encoding=hex
  • 指定双键:

API 调用:

POST /my-cache/3.141456

headers:

Key-Content-Type: application/x-java-object;type=java.lang.Double

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 模式,请在 protobufprotobuf_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

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

person.proto

message Person  {
  required string name = 1;
  required int32 age = 2;
}

Person.json

{
   "_type": "Person",
   "name": "user1",
   "age": 32
}

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部