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()
GO TO FULL VERSION