2017-01-30 1 views
0
umgewandelt

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": {...} 
    } 
} 

Antwort

0

Meine Umgehungslösung war die @HalEmbedded Annotation zu verwenden und einen Kleinen Namen direkt zuweisen. https://github.com/surech/halarious/issues/21

:

public class MyResource implements HalResource { 
    private final String myField; 
    @HalEmbedded(name = "myembeddedresource") 
    private final MyResource myEmbeddedResource; 
    ... 
} 

Ein Problem für das Projekt wurde erstellt

Verwandte Themen