Los solicitantes deben interpretar los metadatos. Metadatos compuestos permite formatear los valores de metadatos de forma independiente (por por ejemplo, para enrutamiento, por motivos de seguridad, rastreo), cada uno de los cuales tiene su propio tipo MIME. Las aplicaciones necesitan una forma de configurar los tipos de metadatos MIME para admitirlos, así como una forma de acceder a los valores extraídos.
MetadataExtractor
es un contrato para obtener metadatos serializados y devolver pares nombre-valor
decodificados, a los que luego se puede acceder como encabezados por nombre, por ejemplo a través de la anotación
@Header
en métodos de controlador anotados.
Se puede pasar un DefaultMetadataExtractor
a instancias de Decoder
para decodificar
metadatos. Desde el primer momento, tiene soporte integrado para "message/x.rsocket.routing.v0", que se decodifica en un String
y se almacena con la clave "route". Para cualquier
otro tipo MIME, debe especificar un Decoder
y registrar el tipo MIME de la siguiente manera:
DefaultMetadataExtractor extractor = nuevo DefaultMetadataExtractor(metadataDecoders);
extractor.metadataToExtract(fooMimeType, Foo.class, "foo");
importar org.springframework.messaging.rsocket.metadataToExtract
val extractor = DefaultMetadataExtractor(metadataDecoders)
extractor.metadataToExtract<Foo>(fooMimeType, "foo")
Los metadatos compuestos son buenos para combinar valores de metadatos independientes. Sin embargo, el solicitante no
podrá admitir ni utilizar metadatos compuestos. En este caso, DefaultMetadataExtractor
puede requerir
una lógica personalizada para mostrar el valor decodificado en el mapa de salida. A continuación se muestra un
ejemplo que utiliza JSON para metadatos:
DefaultMetadataExtractor extractor = nuevo DefaultMetadataExtractor(metadataDecoders);
extractor.metadataToExtract(
MimeType.valueOf("application/vnd.myapp.metadata+json"),
nuevo ParameterizedTypeReference<Map<String,String>>() {},
(jsonMap, mapa de salida) -> {
salidaMap.putAll(jsonMap);
});
importar org.springframework.messaging.rsocket.metadataToExtract
val extractor = DefaultMetadataExtractor(metadataDecoders)
extractor.metadataToExtract<Map<String, String>>(MimeType.valueOf("application/vnd.myapp.metadata+json")) { jsonMap, outputMap -> ;
salidaMap.putAll(jsonMap)
}
Al configurar un MetadataExtractor
a través de RSocketStrategies
, puede dejar que RSocketStrategies.Builder
cree el extractor con los decodificadores configurados y simplemente use la devolución de llamada para configure las
rutinas de registro de la siguiente manera:
Estrategias RSocketStrategies = RSocketStrategies.builder()
.metadataExtractorRegistry(registro -> {
registro.metadataToExtract(fooMimeType, Foo.class, "foo");
// ...
})
.build();
importar org.springframework.messaging.rsocket.metadataToExtract
val estrategias = RSocketStrategies.builder()
.metadataExtractorRegistry { registro: MetadataExtractorRegistry ->
registro.metadataToExtract<Foo>(fooMimeType, "foo")
// ...
}
.build()