Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Standardmäßig stellt ein Tabellenschema über eine Standardimplementierung der AttributeConverterProvider
Schnittstelle Konverter für viele gängige Java-Typen bereit. Sie können das allgemeine Standardverhalten mit einer benutzerdefinierten AttributeConverterProvider
Implementierung ändern. Sie können den Konverter auch für ein einzelnes Attribut ändern.
Eine Liste der verfügbaren Konverter finden Sie in der AttributeConverter
Stellen Sie Anbieter für benutzerdefinierte Attributkonverter bereit
Sie können über die @DynamoDbBean
(converterProviders = {…})
Anmerkung ein einzelnes AttributeConverterProvider
oder eine Kette von bestellten AttributeConverterProvider
S angeben. Jeder benutzerdefinierte AttributeConverterProvider
Benutzer muss die AttributeConverterProvider
Schnittstelle erweitern.
Beachten Sie, dass Sie, wenn Sie Ihre eigene Kette von Anbietern für Attributkonverter angeben, den Standardkonverter-Anbieter außer Kraft setzenDefaultAttributeConverterProvider
. Wenn Sie die Funktionalität von verwenden möchtenDefaultAttributeConverterProvider
, müssen Sie sie in die Kette aufnehmen.
Es ist auch möglich, die Bean mit einem leeren Array {}
zu annotieren. Dadurch wird die Verwendung aller Anbieter für Attributkonverter deaktiviert, einschließlich der Standardanbieter. In diesem Fall müssen alle Attribute, die zugeordnet werden sollen, über einen eigenen Attributkonverter verfügen.
Das folgende Snippet zeigt einen einzelnen Konverter-Anbieter.
@DynamoDbBean(converterProviders = ConverterProvider1.class)
public class Customer {
}
Der folgende Ausschnitt zeigt die Verwendung einer Kette von Konverteranbietern. Da der SDK-Standard zuletzt bereitgestellt wird, hat er die niedrigste Priorität.
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
}
Die Schema-Builder für statische Tabellen verfügen über eine attributeConverterProviders()
Methode, die auf die gleiche Weise funktioniert. Dies wird im folgenden Ausschnitt gezeigt.
private static final StaticTableSchema<Customer> CUSTOMER_TABLE_SCHEMA =
StaticTableSchema.builder(Customer.class)
.newItemSupplier(Customer::new)
.addAttribute(String.class, a -> a.name("name")
a.getter(Customer::getName)
a.setter(Customer::setName))
.attributeConverterProviders(converterProvider1, converterProvider2)
.build();
Überschreiben Sie die Zuordnung eines einzelnen Attributs
Um die Art und Weise, wie ein einzelnes Attribut zugeordnet wird, zu überschreiben, geben Sie an AttributeConverter
für das Attribut ein. Dieser Zusatz hat Vorrang vor allen Konvertern, die von AttributeConverterProviders
im Tabellenschema bereitgestellt werden. Dadurch wird ein benutzerdefinierter Konverter nur für dieses Attribut hinzugefügt. Andere Attribute, auch solche desselben Typs, verwenden diesen Konverter nur, wenn er explizit für diese anderen Attribute angegeben ist.
Die @DynamoDbConvertedBy
Anmerkung wird verwendet, um die benutzerdefinierte AttributeConverter
Klasse anzugeben, wie im folgenden Codeausschnitt gezeigt.
@DynamoDbBean
public class Customer {
private String name;
@DynamoDbConvertedBy(CustomAttributeConverter.class)
public String getName() { return this.name; }
public void setName(String name) { this.name = name;}
}
Die Builder für statische Schemas verfügen über eine äquivalente Methode zur Erstellung von Attributen. attributeConverter()
Diese Methode benötigt eine Instanz von a, AttributeConverter
wie im Folgenden gezeigt.
private static final StaticTableSchema<Customer> CUSTOMER_TABLE_SCHEMA =
StaticTableSchema.builder(Customer.class)
.newItemSupplier(Customer::new)
.addAttribute(String.class, a -> a.name("name")
a.getter(Customer::getName)
a.setter(Customer::setName)
a.attributeConverter(customAttributeConverter))
.build();
Beispiel
Dieses Beispiel zeigt eine AttributeConverterProvider
Implementierung, die einen Attributkonverter für java.net.HttpCookie
Die folgende SimpleUser
Klasse enthält ein Attribut mit dem NamenlastUsedCookie
, das eine Instanz von istHttpCookie
.
Der Parameter für die @DynamoDbBean
Anmerkungen listet die beiden AttributeConverterProvider
Klassen auf, die Konverter bereitstellen.
@DynamoDbBean(converterProviders = {CookieConverterProvider.class, DefaultAttributeConverterProvider.class})
public static final class SimpleUser {
private String name;
private HttpCookie lastUsedCookie;
@DynamoDbPartitionKey
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HttpCookie getLastUsedCookie() {
return lastUsedCookie;
}
public void setLastUsedCookie(HttpCookie lastUsedCookie) {
this.lastUsedCookie = lastUsedCookie;
}
Das CookieConverterProvider
folgende Beispiel bietet eine Instanz HttpCookeConverter
von.
public static final class CookieConverterProvider implements AttributeConverterProvider {
private final Map<EnhancedType<?>, AttributeConverter<?>> converterCache = ImmutableMap.of(
// 1. Add HttpCookieConverter to the internal cache.
EnhancedType.of(HttpCookie.class), new HttpCookieConverter());
public static CookieConverterProvider create() {
return new CookieConverterProvider();
}
// The SDK calls this method to find out if the provider contains a AttributeConverter instance
// for the EnhancedType<T> argument.
@SuppressWarnings("unchecked")
@Override
public <T> AttributeConverter<T> converterFor(EnhancedType<T> enhancedType) {
return (AttributeConverter<T>) converterCache.get(enhancedType);
}
}
Konvertierungscode
In der transformFrom()
Methode der folgenden HttpCookieConverter
Klasse empfängt der Code eine HttpCookie
Instanz und wandelt sie in eine DynamoDB-Map um, die als Attribut gespeichert wird.
Die transformTo()
Methode empfängt einen DynamoDB-Zuordnungsparameter und ruft dann den HttpCookie
Konstruktor auf, der einen Namen und einen Wert benötigt.
public static final class HttpCookieConverter implements AttributeConverter<HttpCookie> {
@Override
public AttributeValue transformFrom(HttpCookie httpCookie) {
return AttributeValue.fromM(
Map.of ("cookieName", AttributeValue.fromS(httpCookie.getName()),
"cookieValue", AttributeValue.fromS(httpCookie.getValue()))
);
}
@Override
public HttpCookie transformTo(AttributeValue attributeValue) {
Map<String, AttributeValue> map = attributeValue.m();
return new HttpCookie(
map.get("cookieName").s(),
map.get("cookieValue").s());
}
@Override
public EnhancedType<HttpCookie> type() {
return EnhancedType.of(HttpCookie.class);
}
@Override
public AttributeValueType attributeValueType() {
return AttributeValueType.M;
}
}