ich den HAL-Spezifikation Rahmen verwenden:Halarious - Eingebettete Ressource Feldnamen mit benutzerdefinierter Benennungsstrategie nicht werden
https://github.com/surech/halarious
http://confluence.surech.ch/display/HAL/halarious+Home
http://stateless.co/hal_specification.html
Es scheint, dass eingebettete Ressource Feld Namen werden nicht korrekt konvertiert, wenn eine benutzerdefinierte Benennungsstrategie verwendet wird. Nur 'Nicht-HAL' Felder werden konvertiert.
Frage: Gibt es eine Möglichkeit sicherzustellen, dass benutzerdefinierte Namenskonventionen auf eingebettete Ressourcen und nicht nur auf normale Felder angewendet werden?
Ich habe folgende Gson Konfiguration in einem benutzerdefinierten MessageBodyWriter ...
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingStrategy(new AllLowercaseFieldNamingStrategy());
builder.registerTypeAdapter(HalResource.class, new HalSerializer());
builder.setExclusionStrategies(new HalExclusionStrategy());
Gson gson = builder.create();
try (OutputStreamWriter writer = new OutputStreamWriter(entityStream)) {
writer.write(gson.toJson(resource, HalResource.class));
}
Die AllLowercaseFieldNamingStrategy
Implementierung einfach den Feldnamen wie so @Override public String translateName(Field f) { return f.getName().toLowerCase(); }
Zum Beispiel in Kleinbuchstaben umwandelt:
public class MyResource implements HalResource {
private final String myField;
private final MyResource myEmbeddedResource;
...
}
führt zu inkonsistenten Feldnamen (sollte basierend auf der Benennungsstrategie klein geschrieben werden) ...
{
"myfield": "...",
"_embedded": {
"myEmbeddedResource": {...}
}
}